[英]Input loses focus when javascript map method is used to render it dynamically
const HeaderField = ({
handleHeaderChange,
removeHeader,
index,
header,
}: any) => (
<HeaderContainer>
<TextField
label="Key"
value={header.key}
onChange={e => handleHeaderChange(e.target.value, 'key', index)}
/>
<TextField
label="Value"
value={header.value}
onChange={e => handleHeaderChange(e.target.value, 'value', index)}
/>
);
const CustomHeadersField = ({ handleChange, fieldKey, categoryKey }: any) => {
const [headers, setHeaders] = React.useState<headersType[] | null>(null);
const addHeader = () => {
const newHeaders = headers ? [...headers] : [];
newHeaders.push({ key: '', value: '' });
setHeaders(newHeaders);
};
const handleHeaderChange = (
value: string,
type: 'key' | 'value',
index: number,
) => {
const newHeaders: any = headers ? [...headers] : [];
if (type === 'key') {
newHeaders[index].key = value;
} else {
newHeaders[index].value = value;
}
setHeaders(newHeaders);
handleChange(newHeaders, fieldKey, categoryKey);
};
return (
<CustomHeadersContainer>
{headers?.map((header, index) => (
<HeaderField
key={Math.random()}
handleHeaderChange={handleHeaderChange}
removeHeader={removeHeader}
index={index}
header={header}
/>
))}
<Button
onClick={addHeader}
variant="contained"
sx={{ width: 'fit-content' }}
>
Add Header
</Button>
</CustomHeadersContainer>
);
};
添加 Header按鈕向標題 state 添加一個新的鍵值對,在表單中添加兩個新字段。
現在header.map會破壞舊組件並為每次按鍵呈現新組件,從而導致它失去焦點。
我嘗試將HeaderField組件移出CustomHeadersField 。 它沒有用。
感謝您的幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.