Persisting React state between route navigation for next.js
Persisting React state between route navigation for react SPA | 即使 SPA 页面间跳转仍能使组件保持数据
quick glacne: https://www.youtube.com/watch?v=KfnBAnNu_GI&list=PLM1v95K5B1ntVsYvNJIxgRPppngrO_X4s
import persist from 'react-persist-state'
const connect = persist({
defaultState: { test: '' }
})
const TestPersist = ({ testProp, setPersist, persisted }) => {
return (<div>
<p>testProp:{JSON.stringify(testProp)}</p>
<p>persisted.test:<input value={persisted.test} onChange={(e) => {
setPersist({ test: e.target.value })
}} /></p>
<p>persisted.test:{JSON.stringify(persisted.test)}</p>
</div>)
}
export default connect(TestPersist)
when you route, persisted
will keep | 当你切换页面,persisted
git clone https://github.com/postor/react-persist-state.git
cd react-persist-state/examples/basic
yarn && yarn dev
persist
pass in config and return connect
| 传入配置,并返回 connect
import persist from 'react-persist-state'
const connect = persist({
maxAge: 0, // timeout(miliseconds) for unmounted persist, 0 means no timeout | 超时时间(毫秒),0表示不限
defaultState: {}, // default persisted state | 默认 state
onUpdate: (key, Comp, newState) => {} // use this hook if you need to know each change | 数据更新的钩子
})
// data is stored in memory, if you close browser, data will lost even not reach maxAge
connect
HOC that generates Components can persist | 返回能够保持状态的组件的 HOC
connect(Comp,key)
[1, 2, 3, 4].map((i) => {
const InputItemK = connect(InputItem, `InputItem-${i}`)
return (<InputItemK key={i} />)
})
props.setPersist
update persisted data | 更新保持的数据
const TestPersist = ({ setPersist, persisted }) => {
...
<a onClick={()=>setPersist(obj)}>
props.persisted
data that persisited | 保持的数据
const TestPersist = ({ setPersist, persisted }) => {
...
<p>{persisted.something}</p>
clearCache
clear cached data when you need memory efficient | 清理缓存数据
connect.clearCache()