получить релевантное значение из useSelector

#react-native #redux #react-hooks #redux-thunk

#react-native #сокращение #реагирующие хуки #redux-thunk

Вопрос:

У меня есть два крючка:

 const dispatch = useDispatch();
const response = useSelector(state => state.responseData);
  

И submit функция:

         const submit = () => {
        
            dispatch(connectToServer(`${BASE_URL}user/signIn`, {
              email: state.email,
              password: state.password
            }, 'post'))
        
            if (response.data.token) <--- this data is 1 step late
              //do smth
  

Я вижу релевантные данные только в элементах JSX, когда они отображаются, но нет способа создать функцию на основе этих данных, эти данные опоздали на 1 шаг.

Ответ №1:

Здесь есть три проблемы:

  • connectToServer Действие, по-видимому, выполняет некоторую асинхронную работу, поэтому ответ не может быть обновлен к моменту выполнения следующей строки
  • Даже если вы это сделаете await dispatch(connectToServer()) , React, возможно, еще не отрисовал повторно
  • Обратный вызов может ссылаться только на значения переменных, которые существовали в области видимости на момент определения обратного вызова, то есть на визуализацию до того, как пользователь нажал кнопку «Отправить».

Вам нужно либо:

  • Переместите обработку ответа в сам блок
  • Попросите thunk извлечь обновленные данные из хранилища и вернуть их / использовать каким-либо образом
  • Переместите обработку токена ответа в useEffect и дождитесь следующего повторного рендеринга с правильными данными