Material-ui 文本域在重新呈现后失去焦点。如何解决?
Material-ui Textfield loosing focus after re-rendering. How to fix it?
我正在使用 Material-ui 文本字段来表示可重复数组对象:
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 方法。每次我更改文本字段中的某些内容时,它都会失去焦点。我也在使用 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
我正在使用 Material-ui 文本字段来表示可重复数组对象:
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 方法。每次我更改文本字段中的某些内容时,它都会失去焦点。我也在使用 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