【发布时间】:2020-11-29 04:17:33
【问题描述】:
你会如何在 Redux 中存储 Ref 元素,你会这样做吗?
我有一个包含一些表单元素的组件,如果用户离开页面并返回,我需要存储用户在表单中选择的字段的状态。
我尝试像这样在 Redux 中注册每个输入字段(我正在使用 Blueprint.js 中的 <InputGroup> 组件):
<InputGroup
inputRef={(ref) => { dispatch(addRefToState(ref)) }}
...more props...
/>
这导致了循环 JSON 引用错误,因为 Redux 将 ref 元素序列化为 JSON 以便将其保存到 localStorage。然后我尝试使用我在 Stackoverflow 上找到的 sn-p 对对象进行“安全”字符串化,在将对象转换为 JSON 之前删除所有循环引用。这种方法很有效,但是 Ref 元素仍然很大,以至于存储在 state 中的 3-5 个 refs 变成了 3MB localStorage,我的浏览器开始变得非常缓慢。此外,我担心我是否可以实际使用该 Ref 对象来引用我的组件,知道我本质上修改了 Ref 对象。我还没有尝试过,因为字符串化对象的性能很差。
我正在考虑放弃“React 方式”,只在每个组件上添加唯一的 ID,将它们存储在 Redux 中并使用 document.querySelector 迭代 DOM,以便在页面加载时聚焦正确的元素。但这感觉就像一个黑客。你会怎么做呢?
【问题讨论】:
标签: reactjs react-redux react-ref