javascript - 在 React 中将数组存储到本地存储中
问题描述
我有一个数组 items[],我在其中输入 4 个键,其值来自输入框。
我现在有数组中的值,但是在页面刷新时值被重置,所以我正在考虑使用 localStorage 我尝试过 -
localStorage.setItem("test", JSON.stringify(items));
为了检索它,我尝试了-
var retrievedData = localStorage.getItem("test");
var test2 = JSON.parse(retrievedData);
但这似乎不起作用,刷新后值仍然消失
新代码——
import React, { Component } from 'react';
import { Table } from 'reactstrap';
class Tab extends React.Component {
render() {
const items = this.props.items;
items.sort((a,b) => {
const name1 = a.name.toLowerCase(), name2 = b.name.toLowerCase();
return name1 === name2 ? 0 : name1 < name2 ? -1 : 1;
});
localStorage.setItem("test", JSON.stringify(items));
var retrievedData = localStorage.getItem("test");
var test2 = JSON.parse(retrievedData);
return (
<Table striped>
<thead>
<tr>
<th >Name</th>
<th>Origin</th>
<th>Destination</th>
<th>Seats</th>
</tr>
</thead>
<tbody>
{test2.map(item => {
return (
<tr>
<td>{item.name}</td>
<td>{item.origin}</td>
<td>{item.destination}</td>
<td>{item.seats}</td>
</tr>
);
})}
</tbody>
</Table>
);
}
}
export default Tab;
解决方案
您需要在设置值之前检查条件localstorage
。喜欢,
if(localStorage.getItem("test") === undefined)
{
localStorage.setItem("test", JSON.stringify(items));
}
因为当您刷新页面时。on load 函数可能会清除数组并将空数组值再次设置到本地存储中。
编辑:
您可以使用全局标志变量作为IsNewData
. 当您提交新数据集IsNewData == true
并IsNewData == false
在提交完成后执行。还要在 if 语句中添加附加条件:)
if(localStorage.getItem("test") === undefined || IsNewData)
{
localStorage.setItem("test", JSON.stringify(items));
}
推荐阅读
- angular - 茉莉花测试,未调用函数
- python-3.x - 日期时间、熊猫和时区问题:AttributeError: 'datetime.timezone' 对象没有属性 '_utcoffset'
- ruby-on-rails - ActiveAdmin 中的 Ruby on Rails 自定义资源检索
- liquid - 当计数器变量的值达到某个数字时,液体标记 {% break %} 退出 for 循环
- javascript - 模拟函数只调用一次
- r - 对 data.table 行应用函数,将前两列和结果保留为 data.table
- javascript - 在 Google Chrome 中,window.open 在带有 # 符号的 csv 上失败
- python - yum 默认将 python 包安装到磁盘的哪个位置?
- ios - 如何解析图像以使用多格式数据和 alamofire url 请求
- hyperledger-composer - composer-rest-server 错误:抛出错误;// 未处理的“错误”事件