我希望在打开模态框时,用默认值填充表单的输入值。
我使用纯JavaScript做到了这一点,使用document.getElementById(textId).value='some value'
,代码如下:
for(var i=0; i<details_data.length;i++){
let textId='text'+i;
let amountId='amount'+i;
document.getElementById(textId).value=details_data[i].text
}
这个方法很有效。但我想知道如何在React中实现,因为我不认为这是最佳实践。
我尝试设置输入值的方式如下:
<input name='text' id={textId} value={el.text} onChange={details_handler.bind(index)}/>
但这并不会让我改变输入的值。它只是设置了默认值,当我在输入框中键入时,值不会像我想要的那样改变。 这是我的代码:
const [details_data,set_details_data]=useState([
{'text':'','amount':''}
])
// called this function on `onChange` and store the data in `details_data`
function details_handler(e){
let name=e.target.name;
let value=e.target.value;
details_data[this][name]=value;
set_details_data(details_data);
}
JSX:
(在我的情况下,用户可以添加任意数量的输入框,因此我将这些输入框放在了映射循环中)
{
details_data.map((el,index) => {
let textId='text'+index;
let amountId='amount'+index;
return (
<div key={index}>
<input name='text' id={textId} value={el.text} onChange={details_handler.bind(index)}/>
<input name='amount' id={amountId} onChange={details_handler.bind(index)}/>
</div>
);
})
}