使用 React 功能组件更新 Array 中 object 中的 属性
To update a property in object in Array with React functional component
我有一个写在 child 组件中的输入字段
及其内部 return 函数
const EditSectionComponent = ({
editCaption,
editName,
}) => {
const {name,caption} = details;
return (
<input
type="text"
className="imageNameDetails"
value={name}
onChange={e => editName(e.target)}
/>
)
}
在 parent 组件中,就像
const onEditClick = id => {
const selectedAsset = All.find(i => i.id === id);
setDetails(selectedAsset);
}
const [details, setDetails] = useState([]);
const editName = target => {
setDetails({ ...details, [name]: target.value })
};
初始页面加载我可以在文本字段中看到标题和名称,但我无法更改其值
它没有更新 UI。是在输入字段中反映新编辑的文本的正确方式
- 确保从
EditSectionComponent
中的道具中解构 details
。
- 在您的 parent 中,初始状态即
details
被定义为一个数组。它必须是 object.
- 此外,在执行
setDetails
时,您需要指定密钥。 (在你的情况下不是动态名称)
更新代码在这里:
const EditSectionComponent = ({
editCaption,
editName,
details,
}) => {
const {name,caption} = details;
return (
<input
type="text"
className="imageNameDetails"
value={name}
onChange={e => editName(e.target)}
/>
)
}
const [details, setDetails] = useState({name: '', caption: ''});
const editName = target => {
setDetails(prev => ({...prev, name: target.value}))
};
我有一个写在 child 组件中的输入字段 及其内部 return 函数
const EditSectionComponent = ({
editCaption,
editName,
}) => {
const {name,caption} = details;
return (
<input
type="text"
className="imageNameDetails"
value={name}
onChange={e => editName(e.target)}
/>
)
}
在 parent 组件中,就像
const onEditClick = id => {
const selectedAsset = All.find(i => i.id === id);
setDetails(selectedAsset);
}
const [details, setDetails] = useState([]);
const editName = target => {
setDetails({ ...details, [name]: target.value })
};
初始页面加载我可以在文本字段中看到标题和名称,但我无法更改其值
它没有更新 UI。是在输入字段中反映新编辑的文本的正确方式
- 确保从
EditSectionComponent
中的道具中解构details
。 - 在您的 parent 中,初始状态即
details
被定义为一个数组。它必须是 object. - 此外,在执行
setDetails
时,您需要指定密钥。 (在你的情况下不是动态名称)
更新代码在这里:
const EditSectionComponent = ({
editCaption,
editName,
details,
}) => {
const {name,caption} = details;
return (
<input
type="text"
className="imageNameDetails"
value={name}
onChange={e => editName(e.target)}
/>
)
}
const [details, setDetails] = useState({name: '', caption: ''});
const editName = target => {
setDetails(prev => ({...prev, name: target.value}))
};