我如何在React Hooks中更新对象数组中的状态onchange

我已经检索了使用useState存储在对象数组中的数据,然后将这些数据输出到表单字段中。现在,我希望能够在键入时更新字段(状态)。

我看过一些例子,说明人们在更新数组中属性的状态,但是从不更新对象数组中的状态,所以我不知道该怎么做。我已经将对象的索引传递给了回调函数,但是我不知道如何使用它来更新状态。

// sample datas structure

const datas = [

{

id: 1,

name: 'john',

gender: 'm'

}

{

id: 2,

name: 'mary',

gender: 'f'

}

]

const [datas, setDatas] = useState([]);

const updateFieldChanged = index => e => {

console.log('index: ' + index);

console.log('property name: '+ e.target.name);

setData() // ??

}

return (

<React.Fragment>

{ datas.map( (data, index) => {

<li key={data.name}>

<input type="text" name="name" value={data.name} onChange={updateFieldChanged(index)} />

</li>

})

}

</React.Fragment>

)

回答:

这是您的操作方式:

// sample datas structure

/* const datas = [

{

id: 1,

name: 'john',

gender: 'm'

}

{

id: 2,

name: 'mary',

gender: 'f'

}

] */ // make sure to set the default value in the useState call (I already fixed it)

const [datas, setDatas] = useState([

{

id: 1,

name: 'john',

gender: 'm'

}

{

id: 2,

name: 'mary',

gender: 'f'

}

]);

const updateFieldChanged = index => e => {

console.log('index: ' + index);

console.log('property name: '+ e.target.name);

let newArr = [...datas]; // copying the old datas array

newArr[index] = e.target.value; // replace e.target.value with whatever you want to change it to

setDatas(newArr); // ??

}

return (

<React.Fragment>

{ datas.map( (data, index) => {

<li key={data.name}>

<input type="text" name="name" value={data.name} onChange={updateFieldChanged(index)} />

</li>

})

}

</React.Fragment>

)

以上是 我如何在React Hooks中更新对象数组中的状态onchange 的全部内容, 来源链接: utcz.com/qa/435380.html

回到顶部