我有一个方法将使用useSelector
中的值,而另一个调度将使用useSelector
中的值更新我的值,但是,似乎该值在调度后不会更新,例如< / p>
const userProfile = (props) => {
const hasValidationError = useSelector(state => {
state.hasValidationError;
}
const dispatch = useDispatch():
const updateProfile = async (userId) => {
dispatch(startValidation()); // <-- this would change the hasValidationError in state
if (hasValidationError) {
console.log('should not update user');
await updateUser(userId);
dispatch(showSuccessMsg());
} else {
conosole.log('can update user');
}
}
}
hasValidationError
始终为假,即使值确实从状态更改了,在dispatch(startValidation())
之后如何立即获取更新的值?
我还尝试了一些不同的操作,例如使用useState()和useEffect()创建本地状态值以监视全局状态
const [canUpdateUser, setCanUpdateUser] = useState(false);
useEffect(() => {
console.log('useEffect hasValidationError :>> ', hasValidationError);
setCanUpdateUser(!hasValidationError);
}, [hasValidationError]);
然后使用canUpdateUser
作为我的updateProfile(if (canUpdateUser)
)中的条件标志,但是,这似乎仅在第一次触发验证时起作用,但是之后,canUpdateUser
的值为总是再次来自我的updateProfile的旧值...
我该如何解决?有什么方法可以确保在某些调度触发后从全局状态获取更新的值?
答案 0 :(得分:0)
您是否可以尝试使用略有不同的方法(将两者结合),因为似乎您想听hasValidationError
的更改,因此使用useEffect
并依赖于该变量可以解决您的问题问题。
const userProfile = (props) => {
const { hasValidationError } = useSelector(state => state);
const dispatch = useDispatch():
const [userId, setUserId] = useState();
const updateProfile = async (userId) => {
dispatch(startValidation());
setUserId(userId);
};
useEffect(() => {
if (hasValidationError) {
console.log('should not update user');
await updateUser(userId);
dispatch(showSuccessMsg());
} else {
conosole.log('can update user');
}
}, [hasValidationError]);
}