【发布时间】:2020-05-21 17:33:03
【问题描述】:
以一个想法开头;我想我可能需要一个递归组件,但这超出了我目前使用原生 js 和 React 的能力,所以我觉得我现在对 React 有了瑞士奶酪的理解。
问题:
我有一个包含metafield 对象的metafields 数组,其结构如下:
{
metafields: [
{ 0:
{ namespace: "namespaceVal",
key: "keyVal",
val: [
0: "val1",
1: "val2",
2: "val3"
]
}
},
...
]
}
我的代码将metafields 映射到卡片中,并且在每张卡片中都有一个组件<MetafieldInput metafields={metafields['value']} />,在该组件中,值数组被映射到输入字段。总体来说是这样的:
// App
render() {
const metafields = this.state.metafields;
return (
{metafields.map(metafield) => (
<MetafieldInputs metafields={metafield['value']} />
)}
)
}
//MetafieldInputs
this.state = { metafields: this.props.metafields}
render() {
const metafields = this.state;
return (
{metafields.map((meta, i) => (
<TextField
value={meta}
changeKey={meta}
onChange={(val) => {
this.setState(prevState => {
return { metafields: prevState.metafields.map((field, j) => {
if(j === i) { field = val; }
return field;
})};
});
}}
/>
))}
)
}
到目前为止,一切都显示正确,我可以更改输入!然而,更改一次发生一个,因为我按下一个键然后我必须单击返回输入以添加另一个字符。似乎所有内容都被重新渲染,这就是为什么我必须重新点击输入以进行另一次更改。
我能以这种方式使用组件吗?感觉就像我正在努力嵌套组件,但我读过的所有内容都说不要嵌套组件。我是不是把这个问题复杂化了?我唯一的解决方案是撕掉 React 部分并将其带到纯 JavaScript 中。
非常感谢您的指导!
【问题讨论】:
-
尝试为每个输入字段添加一个
key属性。
标签: javascript reactjs components