【问题标题】:React : state not immediatly updating, even with prevState and useEffect [duplicate]React:状态不会立即更新,即使使用 prevState 和 useEffect [重复]
【发布时间】:2021-12-17 04:18:21
【问题描述】:

很抱歉这个新手问题,但我搜索并尝试了我在网上找到的所有内容。

这是我的代码:

const [userNewInfos, setUserNewInfos] = useState({
    user_firstname: "1",
    user_lastname: "2",
    user_password: "3",
  });

  useEffect(() => {
    const saveChange = (e) => {
      e.preventDefault()
      setUserNewInfos((prev) => {
        return {
          ...prev,
          user_firstname: "4",
          user_password: "5",
          user_lastname: "6",
        };
      });
      console.log(userNewInfos);
    };
  }, [userNewInfos])

return (
    <div className="modal">
      <form className="modal__infos" onSubmit={saveChange}>
    .......
    </form>
    </div>
    )

我的状态在更改后不会立即更新,显然这是正常行为,因为 useState 正在异步运行,所以我正在使用 ... prevState 来解决问题,但它没有改变任何东西,我的 console.log 总是返回 1、2 和 3 而不是 4、5 和 6。

所以,我使用了 useEffect 钩子,但问题是这样做后,我无法再访问我的 saveChange() 函数,该函数在提交时在我的表单中调用(范围问题)。

我什至不知道 useEffect 是否能解决问题。

如果 prevState 不能解决问题并且 useEffect 使我的函数无法访问,我应该对我的 console.log 执行什么操作以返回 4、5、6?

谢谢

【问题讨论】:

  • 嗨,这不是我的问题,我不明白我应该在我的代码中改变什么

标签: reactjs use-effect


【解决方案1】:

试试

const saveChange = (e) => {
      e.preventDefault()

      const updatedUserNewInfos = {
          ...userNewInfos,
          user_firstname: "4",
          user_password: "5",
          user_lastname: "6",
       };

      setUserNewInfos(updatedUserNewInfos);
      console.log(updatedUserNewInfos);
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2021-11-07
    • 2018-08-05
    相关资源
    最近更新 更多