将 React 的 useReducer 状态持久化到 sessionStorage 中
在页面重新加载时将React useReducer状态保存在sessionStorage中,并通过序列化保护机制确保UI在刷新后仍能正常显示,同时防止敏感信息泄露到存储中。
来源: How to Persist React useReducer State with sessionStorage
解决方案
同时记录正常处理路径和故障恢复路径。重试机制与错误处理都是产品功能的一部分。应将检索策略与生成策略分开,这样被污染的文档便能在不改变模型权重的情况下影响回答方向。
import { useCallback, useReducer, type Dispatch } from 'react'
import { useSessionStorage } from 'react-use'
type ReducerFn<State, Action> = (state: State, action: Action) => State
export default function useSessionStorageReducer<State, Action>(
key: string,
reducer: ReducerFn<State, Action>,
initialState: State
): [State, Dispatch<Action>] {
const [sessionStorageValue, setSessionStorageValue] = useSessionStorage(
`reducer:${key.replaceAll(/\s+/g, '_')}`,
initialState
)
const reducerLocalStorage = useCallback(
(state: State, action: Action) => {
const newState = reducer(state, action)
setSessionStorageValue(newState)
return newState
},
[reducer, setSessionStorageValue]
)
return useReducer(reducerLocalStorage, sessionStorageValue)
}
工作原理
将检索策略与生成策略分开,这样被污染的文档便能在不改变模型权重的情况下影响回答方向。
快速示例用法
将检索策略与生成策略分开,这样被污染的文档便能在不改变模型权重的情况下影响回答方向。
type State = { count: number }
type Action = { type: 'INCREMENT' } | { type: 'DECREMENT' }
function counterReducer(state: State, action: Action): State {
switch (action.type) {
case 'INCREMENT':
return { count: state.count + 1 }
case 'DECREMENT':
return { count: state.count - 1 }
default:
return state
}
}
export function Counter() {
const [state, dispatch] = useSessionStorageReducer('counter_key', counterReducer, { count: 0 })
return (
<div>
<p>Count: {state.count}</p>
<button onClick={() => dispatch({ type: 'INCREMENT' })}>+</button>
<button onClick={() => dispatch({ type: 'DECREMENT' })}>-</button>
</div>
)
}
获取代码
在功能结果旁记录处理时间与成本,提前了解情况可避免在共享环境中出现意外账单。应将检索策略与生成策略分开,这样被污染的文档便能在不改变模型权重的情况下影响回答方向。
操作检查清单
在功能结果旁记录执行时间和成本。提前了解情况可避免在共享环境中出现意外账单。
对输入的内容进行验证和净化处理。将不可信的数据源视为潜在攻击面。
持久性使得演示版本能够转化为完整系统:线程、人工干预以及时间回溯调试都依赖于它。
将类型与组件放在一起,并限制属性的数量。过多的属性会导致 TypeScript 所要避免的债务问题。
编写简短的操作手册:包括密钥轮换、队列清空以及回滚最新更改的方法。
为增强安全性,请在修改代码之前明确输入参数、该步骤的负责人以及结束标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。
在功能结果旁记录执行时间和成本。提前了解情况可避免在共享环境中出现意外账单。
将检索策略与生成策略分开。被污染的文档可以在不改变模型权重的情况下影响答案。
为增强安全性,需在修改代码之前明确输入内容、各步骤的负责人以及终止标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。
同时记录正常流程和故障恢复流程。重试机制及错误处理都是产品功能的一部分。
需对输入内容进行验证和净化。将不可信的语料库视为攻击面。