[英]Change the state value of the property of a particular object that is inside an array
當用戶選中目標<li>
的復選框時,是否有辦法在this.state.items
中this.state.items
特定項目對象的done
屬性值? 例如,如果我選中ID為0
的<li>
內的復選框,則其done
屬性將變為true
。
const Item = props => (
<li>
<input type="checkbox" checked={props.done} onChange={props.event} />
<span>{props.name}</span>
</li>
)
class Foo extends React.Component {
state = {
items: [
{ id: 0, name: 'Item 1', done: false },
{ id: 1, name: 'Item 2', done: false },
{ id: 2, name: 'Item 3', done: false }
]
}
toggleDone = (e) => {
// ???
}
render() {
return(
<ul>
{this.state.items.map(item => (
<Item
key={items.id}
name={item.name}
done={item.done}
event={this.toggleDone} />
))}
</ul>
)
}
}
首先,您需要將項目的index
傳遞給事件處理程序。
{this.state.items.map((item,index) => (
<Item
key={items.id}
name={item.name}
done={item.done}
event={this.toggleDone.bind(this, index)} />
))}
然后,在事件處理程序中,您可以像這樣更改狀態
toggleDone = (index, e) => {
// Create new array and new object to avoid state mutation.
let items = [...this.state.items];
items[index] = Object.assign({}, items[index], {done: e.target.checked});
// Set the state with the updated state.
this.setState({ items });
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.