我对 React 后坐力有一些状态,但是每当手动刷新页面时,都会重置后坐力状态。
这是正常行为吗,因为我知道其他状态管理库喜欢flux
并且react-redux
会这样做。
将其保存到浏览器中是否是最佳实践localStorage
(因为 localStorage 也是一个同步 api,所以这肯定也会导致一些问题。)
即使它是一个相当新的库,是否有某种方法可以在手动页面刷新时保持状态?
我对 React 后坐力有一些状态,但是每当手动刷新页面时,都会重置后坐力状态。
这是正常行为吗,因为我知道其他状态管理库喜欢flux
并且react-redux
会这样做。
将其保存到浏览器中是否是最佳实践localStorage
(因为 localStorage 也是一个同步 api,所以这肯定也会导致一些问题。)
即使它是一个相当新的库,是否有某种方法可以在手动页面刷新时保持状态?
我对 React 后坐力有一些状态,但是每当手动刷新页面时,都会重置后坐力状态。
是的,这是正常行为。
这是正常行为吗,因为我知道 Flux 和 react-redux 等其他状态管理库会这样做。
是的,只有一部分状态管理库会保留数据本身。找到执行此操作的外部库或自定义解决方案更为常见。
将其保存到 localStorage 以使其实际保存在浏览器中是最佳实践吗(因为 localStorage 也是异步 API,因此肯定也会导致一些问题。)
这取决于您的需求:
indexedDB
sessionStorage
是正确的解决方案假设在不了解您的用例的情况下很难提出建议
即使它是一个相当新的库,是否有某种方法可以在手动页面刷新时保持状态?
是的,useRecoilTransactionObserver_UNSTABLE
您可以获得每次 Recoil 更改的通知并保存数据。然后,RecoilRoot' initializeState
你可以恢复它。正如您所说,该库是新的,API 可能会在接下来的几个月内迅速变化
您可以使用recoil-persist库将状态持久保存到 localStorage。
在这里你可以如何使用它:
import { recoilPersist } from 'recoil-persist'
const { persistAtom } = recoilPersist()
const counterState = atom({
key: 'count',
default: 0,
effects_UNSTABLE: [persistAtom],
})
从这里的文档中可以很好地工作。
对订单状态的任何更改都会写入 localStorage,并且在刷新时将来自 localStorage 的值读入订单状态。
// define this function somewhere
const localStorageEffect = key => ({setSelf, onSet}) => {
const savedValue = localStorage.getItem(key)
if (savedValue != null) {
setSelf(JSON.parse(savedValue))
}
onSet(newValue => {
localStorage.setItem(key, JSON.stringify(newValue))
})
}
// this is an example state atom
export const orderState = atom({
key: 'orderState',
default: {
store: {}, // { id, name, phone, email, address }
items: {}, // { [itemId]: { id, name, sizeTable, quantity, size } }
contact: { deliveryOption: 'ship' }, // { name, email, phone, address, city, state, zipcode, promotions, deliveryOption }
},
// add these lines to your state atom,
// with the localStorage key you want to use
effects_UNSTABLE: [
localStorageEffect('order'),
],
})