【发布时间】:2021-03-05 00:35:21
【问题描述】:
所以我有一个片段工厂被传递到一个 Display 组件中。片段具有输入元素。在 Display 内部,我有一个 onChange 处理程序,它获取输入的值并将其存储在 contentData[e.target.id] 中。这可行,但切换显示哪个片段会删除它们的值,我宁愿它没有。所以我试图通过将状态对象传递给工厂来设置它们的值。我以这种复杂的方式来适应我的测试框架。我需要在任何组件之外定义片段并作为道具传递给 Display,并且我需要它们全部共享一个状态对象。
我的问题是设置值。我可以传入状态对象(contentData),但为了确保值转到 contentData 数据对象中的正确键,我试图用输入的 id 对其进行硬编码。除了定义片段的地方不存在 contentData,所以我收到一个错误,提示无法引用未定义的 dataObj 上的特定键。
我需要找到一种方法将输入值设置为 contentData[e.target.id]。谢谢。
定义片段的文件。可惜不是组件。
const fragments = (onChangeHandler, dataObj) => [
<Fragment key="1">
<input
type="text"
id="screen1_input1"
onChange={onChangeHandler}
value={dataObj['screen1_input1']} // this doesn't work
/>
one
</Fragment>,
<Fragment key="2">
<input
type="text"
id="screen2_input1"
onChange={onChangeHandler}
value={dataObj['screen2_input1']}
/>
two
</Fragment>
]
显示.js
const Display = ({ index, fragments }) => {
const [contentData, setContentData] = useState({})
const onChange = e => {
// set data
const newData = {
...contentData,
[e.target.id]: e.target.value
}
setContentData(newData)
};
return (
<Fragment>{fragments(onChange, contentData)[index]}</Fragment>
);
};
【问题讨论】:
标签: javascript reactjs