@crysiscaramel

Почему данные, которые хранятся в store, не могут переопределяться внутри функции, которая объявлена в React-компоненте?

есть reducer:
const initState = Immutable.fromJS({
  isConfirmation: false
});

export default function auth(state = initState, action) {
  switch (action.type) {
    case actions.SET_AUTH_SUCCESS: {
      return state.merge({
        isConfirmation: true,
      });
    }

    default:
      return state;
  }
}

используется redux-thunk для middleware и есть action creators, который меняет переменную isConfirmation :
setAuth: body => async (dispatch) => {
  try {
    const { data } = await fetch(body);
    dispatch({
      type: actions.SET_AUTH_SUCCESS,
      payload: data,
    });
  } catch (error) {
    dispatch({
      type: actions.SET_AUTH_FAILURE,
    });
  }
}

есть React-компонент:
const Auth = (props) => {
  const { isConfirmation } = props;

  const handleSubmit = async () => {
    await setAuth()
    console.log(isConfirmation)
  }
  return (
    <button onClick={handleSubmit} />
  )
}

в области видимости handleSubmit , после того как выполниться action creators - setAuth(), isConfirmation останется false, но в области видимости компонента isConfirmation сразу поменяется, почему изменения не отображаются в функции handleSubmit ?
  • Вопрос задан
  • 131 просмотр
Решения вопроса 1
hzzzzl
@hzzzzl
наверняка потому что const { isConfirmation } = props; это происходит при рендере,
а пере-рендер происходит после выхода из handleSubmit(), то есть в хандлеСубмите еще старые пропсы и еще предыдущий isConfirmation
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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