如何实现关闭浏览器后仍可访问React校园Chromebook信息录入系统的已存数据
实现方案
方案1:单设备本地存储(无需后端,开发成本最低)
直接使用浏览器自带的localStorage API即可实现数据持久化,仅需修改你的App.js代码即可完成:
需要做两处核心改动:
- 组件初始化时从
localStorage读取已存储的记录,赋值给state的items字段 - 每次提交表单更新
items后,同步把新的记录数组写入localStorage
修改后的App.js完整代码如下:
class App extends Component { constructor() { super(); // 组件初始化时读取本地存储的已有记录,无记录则默认空数组 const savedItems = localStorage.getItem('chromebookRecords') ? JSON.parse(localStorage.getItem('chromebookRecords')) : []; this.state = { laptopTag: '', studentName: '', studentGrade: '', status: '', items: savedItems } }; handleFormSubmit = (e) => { e.preventDefault(); let items = [...this.state.items]; items.push({ laptopTag: this.state.laptopTag, studentName: this.state.studentName, studentGrade: this.state.studentGrade, status: this.state.status, }); this.setState({ items, laptopTag: '', studentName: '', studentGrade: '', status: '', }, () => { // 状态更新后同步将新记录写入本地存储 localStorage.setItem('chromebookRecords', JSON.stringify(this.state.items)); }); }; handleInputChange = (e) => { let input = e.target; let name = e.target.name; let value = input.value; this.setState({ [name]: value }) }; render() { return ( <div className="App"> <Form handleFormSubmit={ this.handleFormSubmit } handleInputChange={ this.handleInputChange } newLaptopTag={ this.state.laptopTag} newStudentName={ this.state.studentName } newStudentGrade={this.state.studentGrade} newStatus={this.state.status} /><br/><br/> <Table items={ this.state.items }/> </div> ); } }
该方案的数据仅存储在当前使用的浏览器中,清理浏览器缓存、更换浏览器或设备都无法读取数据,仅适合单人单设备临时使用的场景
方案2:多设备共享存储(适合学校正式场景使用)
如果需要多终端访问数据、避免清理缓存导致数据丢失,需要搭配后端服务和数据库实现,核心逻辑如下:
- 搭建后端服务,开发两个基础接口:一个用于提交新增设备记录,一个用于查询所有已存储的记录
- 后端将数据存储在MySQL、MongoDB这类持久化数据库中
- App组件初始化时,调用查询接口拉取所有记录初始化
items - 表单提交时,先调用新增接口把数据传到后端存储成功后,再更新本地state
该方案支持跨设备、跨浏览器访问数据,数据安全性更高,符合学校正式使用的需求
内容的提问来源于stack exchange,提问作者NaPared
相关产品推荐
相关产品推荐

