nin*_*ino 16 browser router browser-history reactjs
我试图找出当用户使用后退/前进浏览器按钮导航时如何使我的React SPA应用程序保持状态.例如,用户正在填写表格,然后他前后移动并自动恢复表格.
我回顾了很多JavaScript路由器,但似乎没有一个正确解决这个问题......(甚至根本没有).
目前我正在使用React Router 4,这是我采用的模式:
history.replace(this.state); 然后我移出页面history.push(newLocation)componentWillMount)我检查this.props.location.state !== undefined,如果是,我恢复它this.setState(this.props.location.state)我的问题是:上述模式是否正确?建议?有没有更好的和广泛采用的方式?
nin*_*ino 10
过了一会儿,我发现了一个合理的解决方法:
this.setState()我保持状态与历史同步使用window.history.replaceState({ key: history.location.key, state: this.state}) willMount和willReceiveProps)我检查状态props.params.location.state:如果有一个,我确实恢复它; 如果没有,我会创造一个全新的状态.this.setState和window.history.pushState这个解决方案似乎很好用,唯一的小缺点是:
this.setState是一个陷阱,因为它是异步的,你不能this.state在它之后使用,除非你做诡计.constructor()的Component总的来说,我写了一个PageComponent扩展Component,完成所有初始/恢复工作; 它还会覆盖this.setState使其与历史记录自动同步并避免异步烦恼.
| 归档时间: |
|
| 查看次数: |
10225 次 |
| 最近记录: |