Реакция избыточного значения внутри функции функционального компонента возвращает значение на цикл позже - PullRequest
0 голосов
/ 30 января 2020

Я недавно изменил свой код с компонентов класса на функциональные компоненты и используя хуки. Тем не менее, я столкнулся с проблемой, когда доступ к избыточному значению, используя useSelector и useDispatch.

let started = useSelector((state: any) => state.routines.started)
const dispatch = useDispatch()

Значение, которое я извлекаю из useSelector, работает, однако, при доступе к этому значению внутри функции, значение начального возвращает только свое предыдущее ожидаемое значение. Только после второго повторного отображения значение начала изменяется на ожидаемое значение.

Скажем, у меня есть код этой кнопки

<Button onPress={() => startRoutine()}>Start routine</Button>

И функция startRoutine

let startRoutine = () => {
        dispatch(startRoutineAction())
        console.log(`started (startRoutine Home): ${started}`);
        if(started){
            ...START CODE

        } else {
            ...STOP CODE
        }
}

Я ожидаю, что после отправки метода startRoutineAction () значение начального значения становится истинным или ложным. Тем не менее, я получаю false после регистрации его в функции startRoutine. Странная часть в том, что я получаю true, когда регистрирую его вне функции startRoutine, как это. Это все еще в компоненте функции

console.log(started)
return (
    ...VIEW CODE
)

Тогда я заметил, что, хотя действия распределяются правильно, к значениям, доступным из функции startRoutine, обращаются с циклом поздно. Это можно увидеть в счетчике, где я записываю текущий счетчик после отправки функции addCount ()

let addCount = () => {
    dispatch(addCount())
    console.log(`count: ${count}`);
}

Если значение count начинается с 0. Затем при первом запуске функции addCount , он вернет значение счетчика 0, хотя ожидаемое значение должно быть 1

Я использую следующие версии пакета

  • expo ^ 35.0.0
  • реаги-редукс ^ 7.1.1
  • реду-персистент ^ 5.10.0.

1 Ответ

1 голос
/ 30 января 2020

В Redux, как только отправляется Action, он не обновляет хранилище немедленно, он вызывает редуктор с действием и текущим состоянием, он не будет ждать, пока редуктор завершит обновление состояния и в Между тем, ваше следующее утверждение выполнено. Таким образом, значение обновляется, но вы получаете предыдущее состояние в вашем console утверждении.

Вы можете проверить это do c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...