@JavaSscriptNoob

Почему не происходит перерисовка в самописном react-redux?

Всем привет , вот так я меняю мой стейт :
сам стор :
const initialState = { firstname: "" };
const reducer = (state = initialState, action) => {
  switch (action.type) {
    case "SET_FIRSTNAME":
      state.firstname = action.payload.firstname;
      return {
        ...state,
      };
    default:
      return state;
  }
};

export const createStore = (reducer) => {
  let state = reducer(undefined, {});
  let callback;
  return {
    dispatch: (action) => {
      reducer(state, action);
      callback();
    },
    getState: () => state,
    subscribe: (cb) => {
      callback = cb;
    },
  };
};
export const store = createStore(reducer);

Как происходит изменение
store.subscribe(() => {
      setUser(store.getState());
    });

При этом если изменение будет таким
store.subscribe(() => {
      setUser({ ... store.getState()});
    });

то всё работает ...
экшены и тд не скидую так как они 100% правильные .
setUser- ф-я для изменения useState ( за счёт чего происходит изменение )
  • Вопрос задан
  • 91 просмотр
Решения вопроса 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
state.firstname = action.payload.firstname;тут Вы мутируете предыдущий стейт, что потенциально может привести к невозможности сравнить стейты.

reducer(state, action);возвращаемый стейт никуда не записывается

callback();А вот тут может быть потенциально ошибка, так как callback может быть undefined
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы