如何解决如何在ReactJS中使用默认值编辑输入
因此,除了将value
更改为defaultValue
来手动更改输入值之外,还有其他方法吗? (当使用defaultValue时,我的程序无法正常运行)
ChildComponent = React.memo(
({ name,index,onChange,onDelete
}) => {
return (
<div>
<input value={name} onChange={onChange(index,name)} />
<button onClick = {() => onDelete(index)}>delete</button>
</div>
);
}
);
function App() {
const [names,setNames] = React.useState(["First","Second"]);
const newName = React.useRef();
const onNameChange = (index: number,newName: string) => (event: {
target: { value: string };
}) => {
names[index] = event.target.value;
setNames(names);
};
function onNameDelete(index: number) {
const nameArr = [...names];
nameArr.splice(index,1);
setNames(nameArr);
}
return (
<div>
{names.map((name,index) => (
<ChildComponent
key={index}
name={name}
index={index}
onChange={onNameChange}
onDelete={onNameDelete}
/>
))}
</div>
);
}
解决方法
问题出在onChange
中的ChildComponent
输入处理程序中。您根本没有使用用户传递的值来输入。您需要将其编写为类似于onDelete
处理程序(使用存储在event.target.value
中的代码段中的新值):
ChildComponent = React.memo(
({ name,index,onChange,onDelete
}) => {
return (
<div>
<input value={name} onChange={(event) => onChange(index,event.target.value)} />
<button onClick = {() => onDelete(index)}>delete</button>
</div>
);
}
);
还要查看Html documentation中输入更改处理程序的定义。
编辑: 另一个问题是您在父控制器中的处理程序:
const onNameChange = (index: number,newName: string) => (event: {
target: { value: string };
}) => {
names[index] = event.target.value; //this is BAD,do not change your state value directly,moreover,the event is undefined here
setNames(names);
};
您需要不可变地更新数组中的项(源Updating an Item in an Array):
const onNameChange = (index: number,newName: string) => (event: {
target: { value: string };
}) => {
const newNames = names.map((item,itemIndex) => {
if (itemIndex !== index) {
// This isn't the item we care about - keep it as-is
return item
}
// Otherwise,this is the one we want - return an updated value
return newName;
});
setNames(newNames);
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。