bestCoderEver1111 / my-own-redux

My own custom redux

Home Page:https://my-own-redux.netlify.app/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

logo

My Own Redux

About

My own redux implementation with typescript. Integrated this technology into react app to show how it works in real project.

Things that has been implemented:

  • createStore(subscribe, unsubscribe, getState, dispatch)
  • useSelector
  • useDispatch
  • reducer
  • persist
  • logger
  • Anti-rerender logic (redux prevState and current state comparison)

screenshot

How it works

Store is created by createStore function. Store is state keeper. useSelector is used to subscribe on store to see state changes. If required state field is changed, react component where useSelector is called will be re-render. This is how useSelector logic looks like:

const useSelector = (selector: SelectorCallback) => {
  const [state, setState] = useState<State>({});

  useEffect(() => {
    const selectedState = selector(store.getState());
    setState(selectedState);

    const unsubscribe = store.subscribe((previousState, currentState) => {
      const prevState = selector(previousState);
      const newState = selector(currentState);

      // Anti-Rerender logic
      const stateHasBeenChanged = !isEqual(prevState, newState);

      if (stateHasBeenChanged) {
        setState(newState);
      }
    });

    return () => {
      unsubscribe();
    };
  }, []);

  return state;
};

How to start locally

  1. npm install - install all dependencies
  2. npm start - start a project

Technologies used

  • React
  • Typescript

About

My own custom redux

https://my-own-redux.netlify.app/


Languages

Language:TypeScript 83.3%Language:HTML 11.5%Language:CSS 5.2%