首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UseEffect在使用sessionStorage时不会触发sessionStorage

UseEffect在使用sessionStorage时不会触发sessionStorage
EN

Stack Overflow用户
提问于 2022-09-05 12:11:28
回答 4查看 57关注 0票数 -1

嘿,我的密码出问题了。

代码语言:javascript
复制
const [itemsCart, setCart] = useState([]);
  useEffect(() => {
    (async function (){
      const buffer = await JSON.parse(window.sessionStorage.getItem("itemsCart"))
      setCart(buffer);
      console.log(buffer);
      console.log(itemsCart);
    })()
  }, []);

  useEffect(() => {
    window.sessionStorage.setItem("itemsCart", JSON.stringify(itemsCart));
  }, [itemsCart]);

缓冲区获取数据,状态变量没有。我假设同步肯定有问题,但是我无法修复。输出:这里

EN

回答 4

Stack Overflow用户

发布于 2022-09-05 12:16:21

之所以会发生这种情况,是因为react会等到调用useEffect中的所有脚本之后,setState才会触发重发程序。因为可以有多个setStates,而且我们只想重新修改它一次。这意味着,您是在console.log(itemsCart)中记录旧值,而不是在rerender之后它实际存在之前。

在更新useEffect之前,您可以使用第二个sessionStorage对其进行登录,您将看到状态发生了更改。也可以为此创建新的useEffect。

代码语言:javascript
复制
useEffect(()=>{
 console.log(itemsCart)
},[itemsCart]);
票数 -1
EN

Stack Overflow用户

发布于 2022-09-05 13:01:23

这样做是可行的:

代码语言:javascript
复制
const [itemsCart, setCart] = useState(JSON.parse(window.localStorage.getItem("itemsCart")));

  useEffect(() => {
    console.log(itemsCart);
    window.localStorage.setItem("itemsCart", JSON.stringify(itemsCart));
  }, [itemsCart]);
票数 -1
EN

Stack Overflow用户

发布于 2022-09-05 13:06:23

要运行第二个useEffect(),需要在通过useState()之前修改itemsCart。当你打电话给useEffect()时,我看不见你的第一个setItemsCart()

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73609168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档