@lookingfor2

Могу ли я получить актуальный state в файле js?

Пытаюсь получить актуальный state через getState(), при этом знаю, что state был изменен, а мне возвращаются не обновленные данные

вот что в файле store

export function initializeStore(initialState = baseState) {

  return createStore(
    mainReducer,
    initialState,
    composeWithDevTools(applyMiddleware(thunk))
  );

}

export const baseReducer = (state = baseState, action) => {
  switch (action.type) {

  case TEST: {

    return {...state, isTest: true};

  }
  case UPDATE_TOKEN: {

    return {...state, userAuthToken: action.payload};

  }

  case "SET_PROJECT_DATA": {

    return state = {
      ...state,
      [action.payload.name]: action.payload.value
    };

  }
  case "SET_PROJECT_DATA_ARRAY": {

    action.payload.forEach(function (item) {

      if (typeof item === "object") {

        const keys = Object.keys(item);
        keys.forEach((key) => state = {
          ...state,
          [key]: item[key]
        });

      }

    });

  }

  case "CLEAR_PROJECT_ERRORS": {

    return state = {...state, [action.payload.name]: ""};

  }
  default:
    return state;

  }
};


файл js
export const submitStepOne = () => async (dispatch, getState) => {

  const registerData = {
    a: 1
  };

  try {
    const responseA = await a(registerData);
    dispatch(setData("newUser", responseA.data));
  } catch (error) {
    dispatch(setData("error", error));
  }

 // пытаюсь получить стор, возвращает старый
  setTimeout(() => console.log(getState().base), 1000);

  if (!getState().base.projectError) {
    Router.push("/registration/two");
  }


};
  • Вопрос задан
  • 46 просмотров
Решения вопроса 1
case "SET_PROJECT_DATA": {
  return state = {
    ...state,
    [action.payload.name]: action.payload.value
  };
}

Приравнивать к state здесь (и в других местах) совершенно не нужно, нужно просто вернуть новый объект.

case "SET_PROJECT_DATA_ARRAY": {
  action.payload.forEach(function (item) {
    if (typeof item === "object") {
      const keys = Object.keys(item);
      keys.forEach((key) => state = {
        ...state,
        [key]: item[key]
      });
    }
  });
}
А здесь вы и вовсе мутируете объект состояния, ничего при этом не возвращая. Вы здесь должны вернуть абсолютно новый объект, никак не изменяя старый.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы