javascript - localstorage setItem() 在某些情况下不起作用

标签 javascript reactjs local-storage

我正在使用 react reducer 来处理从列表中删除项目的请求:

case 'REMOVE_ITEM': {
      let products = state.products!
      for( var i = 0; i < products.length; i++){ 
    
        if ( products[i].id === action.payload) { 
          products.splice(i, 1); 
        }
      }

      let result = {...state, products: products, productSelected: products[0]}
      localStorage.setItem('state', JSON.stringify(result))
      console.log(result)
      return { ...state, products: products, productSelected: products[0]}
    }

当我单击第一个项目时,一切都很好,但是当我删除其他项目时,我的状态更新和 console.log(result) 工作正常,但本地存储没有更新,所以我假设 setItem 未启动。 如果有人能帮助我解决这个问题,我将不胜感激。

最佳答案

在 React 中,状态是不可变的。简单来说,这意味着您不应该直接修改它。相反,应该创建一个新对象来使用 setState 设置状态。

splice() 方法会改变数组。 filter() 不会改变调用它的数组。最好采用以下方法:

const deleted=state.products.filter((item)=>item.id !=== action.payload)

return { ...state, products: deleted}

如果你想在本地存储中存储一些东西,最好使用react中的生命周期:

componentDidUpdate() 用于类组件 useEffect 用于功能组件

关于javascript - localstorage setItem() 在某些情况下不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72033806/

相关文章:

html - 在 Toggle 上添加第二个类时出现语法错误

android - Xamarin Forms 中的应用程序设置/属性类似于 Android 中的共享首选项

javascript - 需要 HTML5 Localstorage 帮助

javascript - 使用 React 功能组件重定向

javascript - 使用变量名调用函数

javascript - 在 localStorage 中使用 .removeItem

javascript - 自动完成类别和远程数据源

javascript - 使用父级 React 元素的 this.props 重复子级

javascript - JavaScript 可以更改@page CSS 的值吗?

javascript - 可滑动的内联按钮移动