我开始在一个新项目中实现reducer模式,我想知道useReducer
钩子与async immutability
具有与useState
钩子相同的问题。
我的意思是:
const [state, setState] = useState('');
const handleChange = e => {
setState(e.target.value);
// It doesn't give the current value, it gives the previous one, which is ''
console.log(state);
// So i need to set the current value in a variable to avoid the async immutability
const currentValue = e.target.value;
console.log(currentValue);
e.stopPropagation();
}
<input type='text' value={state} onChange={handleChange}>PRESS</button>
对于useReducer
挂钩,我需要做同样的事情:在variable
中设置当前change
?
无论使用useState
还是useReducer
,您都将在下一个渲染周期中看到更新的值。
这不是一个缺陷,而是一个设计。如果要使用更新后的值执行某些操作,请使用useEffect
,它会在每次渲染后运行。
因此,它将具有新的价值。
问题已解决
为了避免useReducer
的挂钩不变性,我们需要在variable
中设置current value
。然后访问该变量。
const initialState = {
value: ''
};
const [state, dispatch] = useReducer(SomeReducerFunction, initialState);
const handleChange = e => {
dispatch({type: SOME_ACTION_TYPE, payload: e.target.value });
const currentValue = e.target.value;
console.log(currentValue);
e.stopPropagation();
}
<input type='text' value={state} onChange={handleChange}>PRESS</button>