Reactjs 设置状态不';在react中,您不会第一次得到更新
我有两个组件,我想在单击按钮时将新值设置为state from child component,所以我有以下内容Reactjs 设置状态不';在react中,您不会第一次得到更新,reactjs,Reactjs,我有两个组件,我想在单击按钮时将新值设置为state from child component,所以我有以下内容 // parent component const [clickedSubmit, setClickedSubmit] = useState(false); const [state, setState] = useState({ .., val: '', }) function handleOnSubmit(e) { e.preventDefault(
// parent component
const [clickedSubmit, setClickedSubmit] = useState(false);
const [state, setState] = useState({
..,
val: '',
})
function handleOnSubmit(e) {
e.preventDefault();
setClickedSubmit(true);
console.log(state);
}
// child component
..
useEffect(() => {
if (clickedSubmit) {
setState({
...state,
val: sigRef.current.getTrimmedCanvas().toDataURL("image/png"),
});
}
}, [clickedSubmit])
当我第一次单击按钮时,
state.val
为空,仅在第一次之后显示值,当我在handleOnSubmit
功能之外运行console.log时,它记录两次,第一次为空,第二次为值。为什么会发生这种情况?我如何才能只获取在handleOnSubmit
函数中具有更新值的状态?,因为状态的更改是异步的
因此,您将无法立即检查状态的状态
您可以使用useffect
功能跟踪它
像这样
useEffect(()=>{
console.log("useEffect state",state)
},[staet])
我觉得这行有一个输入错误:
const[state,setState]=useState({..,val:'})
您试图在这里初始化的值是什么?当用户单击submit btn时,val
的初始化值为空字符串,我试图通过从子组件调用setState
来更改val
的值,方法是将clickedSubmit
更改为true
,但状态不会在handleOnSubmit
函数中立即更新。是的,我在useffect
函数中看到值,但是我找不到一种方法,只能使用useffect
获取更新后的值并传递给handleOnSubmit函数。现在,我做了另一个按钮来保存那个值,然后又做了另一个按钮来保存最终的值,它就工作了。@KaungKhantZaw