【发布时间】:2021-11-08 11:55:39
【问题描述】:
我正在使用 Material-ui Textfield 来表示可重复的数组对象:
const [sections, setSections] = useState([
{
Title: "Introduction",
Text: ""
},
{
Title: "Relationship",
Text: ""
},
{
Title: "Monitoring",
Text: ""
}
]);
我正在使用 .map 函数渲染这些部分。问题是我在我的文本字段中使用:
<TextField
value={el.Title}
onChange={(event) => {
el = { ...el, Title: event.target.value };
sections[ind] = el;
console.log(sections);
return setSections([...sections]);
}}
variant="outlined"
label={`Section ${ind + 1}`}
style={{ margin: "auto" }}
/>
这个 onChange 方法。每次我在 Textfield 中更改某些内容时,它都会失去焦点。我也在使用 TextareaAutosize 和 onChange 相同的方法:
<TextareaAutosize
label="Message"
variant="outlined"
placeholder="Write here..."
value={el.Text}
onChange={(event) => {
el = { ...el, Text: event.target.value };
sections[ind] = el;
console.log(sections);
return setSections([...sections]);
}}
className={classes.messageStyle}
style={{ width: "70%", marginLeft: "2.5%" }}
minRows={5}
/>
但在这里我并没有失去焦点,一切都很好。我发现失去焦点是设置新状态后重新渲染部分的结果。这意味着 TextField 被假定为新组件,这就是我失去焦点的原因。问题是为什么使用 TextareaAutosize 我不会遇到这个问题以及如何为 TextField 修复它?
这里是沙盒:
https://codesandbox.io/s/ancient-worker-td4bm?file=/src/App.js:1023-1239
【问题讨论】:
标签: javascript reactjs material-ui textfield