我有一个项目列表,我想将一些数据从一个子组件带到“事实源”中,在本例中选择了哪些项目,但是我能想到的指定选择了哪些列表项目的唯一方法是使用event.target.id属性。我在其中一个子组件中指定了该属性。请参见下文
constructor(props){
super(props)
this.state = {
showDialog : false,
preparedSpells: [],
}
}
onPrep(e){
let prepedSpells = this.state.preparedSpells
let targetSpell = Number(e.target.id)
if (prepedSpells.includes(targetSpell)){
let index = prepedSpells.indexOf(targetSpell)
prepedSpells.splice(index,1)
} else {
prepedSpells.push(targetSpell)
}
this.setState({
prepedSpells : prepedSpells
})
render(){
return(
<SpellList spells = {this.spells} onSpellClick = {this.onSpellClick} onClick = {this.onPrep}></SpellList>
);
我需要数据处于这个级别,但是我觉得应该有一种方法来设置其中一个列表项组件的状态,然后遍历所有组件以找到选中的组件。
我知道数据只会在react中向下流动,但我错过了什么吗?或者我应该把这种错误的感觉憋在心里
1条答案
按热度按时间rwqw0loc1#
在我看来你已经很接近正确了。
让我告诉你我会改变什么:您可以只传递id,而不是将整个事件传递给“onPrep”。
实际上我没有SpellList组件的代码,但您应该有类似以下的代码:
这样,您就可以将任何您想要传递给click事件处理程序的内容传递给它,而且它会使事情看起来更简洁。