31 lines
		
	
	
		
			554 B
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			31 lines
		
	
	
		
			554 B
		
	
	
	
		
			JavaScript
		
	
	
export default function create(initialState) {
 | 
						|
  let state = initialState;
 | 
						|
  const listeners = [];
 | 
						|
 | 
						|
  function setState(partial) {
 | 
						|
    state = { ...state, ...partial };
 | 
						|
    for (let i = 0; i < listeners.length; i++) {
 | 
						|
      listeners[i]();
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  function getState() {
 | 
						|
    return state;
 | 
						|
  }
 | 
						|
 | 
						|
  function subscribe(listener) {
 | 
						|
    listeners.push(listener);
 | 
						|
 | 
						|
    return function unsubscribe() {
 | 
						|
      const index = listeners.indexOf(listener);
 | 
						|
      listeners.splice(index, 1);
 | 
						|
    };
 | 
						|
  }
 | 
						|
 | 
						|
  return {
 | 
						|
    setState,
 | 
						|
    getState,
 | 
						|
    subscribe,
 | 
						|
  };
 | 
						|
}
 |