【问题标题】:Hooks dont update the states correctly [duplicate]钩子没有正确更新状态[重复]
【发布时间】:2022-01-18 05:34:32
【问题描述】:

您好,我试图在反应中设置状态,但它们没有正确更新,我有:

const [campusName, setCampusName] = useState("");
const [assists, setAssists] = useState({
    name:"",
    hour: "",
    day: "",
    month: "",
    year: "",
    studentid: "",
});

const [date, setDate] = useState({
    day: "",
    month: "",
    year: "",
    hour: "",
});

useEffect(()=>{
getData();
}, [])

const getData = async() =>{

    //campus name
    const campusResponse = await fetch("http://localhost:2000/info/campus/"+params.campusid);
    const campusData = await campusResponse.json();
    setCampusName(campusData.name);

    //date
    const date = new Date();   

    setDate({
        day: date.getDate(),
    month: date.getMonth()+1,
    year: date.getFullYear(),
    hour: `${date.getHours()}:${date.getMinutes()}`,
    });

    settingAssistence();
}

const settingAssistence = () => {
    setAsists({
        name: campusName,
        campusid: params.campusid,
        hour: date.hour,
        day: date.day,
        month: date.month,
        year: date.year,
        studentid: params.studentid,
    })

    console.log("result", asissts);
}

console.log 将协助对象打印为空,但如果我刷新页面 3 次它可以工作,我如何才能正确设置状态?使用 http://localhost:2000/info/campus/ 获取也很有效,并给了我正确的数据,但是当我将它设置到钩子中时没有正确更新。

【问题讨论】:

  • 什么时候调用setAssists函数?另请注意,反应批处理状态更新:控制台在设置状态后立即记录它可能不会反映最新状态。
  • 完全为空或 '' 值未填充为 Campusid: "" ?因为这可能意味着很多不同的事情
  • 让我知道,所以我们关闭这个,钩子有自己的行为,关闭和更新时的异步性质
  • campusid 不为空,但在这部分不需要,我会编辑它

标签: javascript reactjs express react-hooks


【解决方案1】:

只需在您的 UI 中添加一个小按钮即可记录助攻状态。 Hooks 会花时间执行,如果您在设置状态后立即记录结果,则不会显示实际值。

【讨论】:

  • 它有效,但前提是我刷新代码 3 次
  • 我也试过你在第二个参数中放入 te useEffect: [assists] 所以它会刷新但它会导致无限循环并且我的内存崩溃(我认为是因为日期每秒都在变化)
  • 对不起,但这对我来说绝对没有意义。也许您的代码存在更大的问题,它不依赖于这段特定的代码?
猜你喜欢
  • 2021-02-12
  • 2020-03-09
  • 1970-01-01
  • 1970-01-01
  • 2020-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-31
相关资源
最近更新 更多