Я недавно изменил свой код с компонентов класса на функциональные компоненты и используя хуки. Тем не менее, я столкнулся с проблемой, когда доступ к избыточному значению, используя 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.