【问题标题】:updating a state immediately using react hooks [duplicate]使用反应钩子立即更新状态[重复]
【发布时间】:2020-08-31 21:49:56
【问题描述】:

我正在尝试在触发后更新状态,并希望立即使用该状态来触发函数,但该状态并未立即更新。

有什么建议吗?

                 <Button
                       onClick={() => {
                        console.log(finalData) //old data
                       setFinalData(mutableData); // updating state
                        console.log(finalData) // still geeting old state
               }>
           </Button>

【问题讨论】:

标签: javascript reactjs react-redux react-hooks


【解决方案1】:

setFinalData 是一种异步行为,所以如果你:

console.log(finalData) //old data
setFinalData(mutableData); // <----- async behavior
console.log(finalData) // you will never get updated finalData directly here

解决方案:useEffect

useEffect(() => {
    // you will get updated finalData here, each time it changes
    console.log(finalData);
    // you can trigger your function from here
},[finalData]);

这里是sn-p代码,希望能解开你的疑惑:

const { useState , useEffect } = React;

const App = () => {

  const [finalData,setFinalData] = useState([]);

  useEffect(() => {
    setTimeout(() => {
      setFinalData([...finalData, "Vivek" , "Darshita"]);
      console.log("finalData -----> not updated right after" ,finalData);
    },2000);
  },[]);

  useEffect(() => {
    if(finalData.length)
      console.log("Final data updated , invoke your function" , finalData)
  },[finalData]);

  return (
    <div>
      { finalData.map(user => <p>{user}</p>) }
    </div>
  );
}

ReactDOM.render(<App />, document.getElementById('react-root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.4/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.4/umd/react-dom.production.min.js"></script>
<div id="react-root"></div>

【讨论】:

  • 如何立即更新状态,我想在设置状态后触发一个函数并使用这个状态
  • @BhartSupriya, useEffect 是你所需要的
猜你喜欢
  • 1970-01-01
  • 2021-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多