Reactjs 设置状态不';在react中,您不会第一次得到更新

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(

我有两个组件,我想在单击按钮时将新值设置为state from child component,所以我有以下内容

// 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