A7D*_*7DC 5 javascript dictionary reactjs
我有一个 .map() 函数,我在其中迭代数组和渲染元素,如下所示:
{options.map((option, i) => (
<TachyonsSimpleSelectOption
options={options[i]}
key={i}
onClick={() => this.isSelected(i)}
selected={this.toggleStyles("item")}
/>
Run Code Online (Sandbox Code Playgroud)
我正在切换所选元素的状态,如下所示:
isSelected (i) {
this.setState({ selected: !this.state.selected }, () => { console.log(this.state.selected) })
}
Run Code Online (Sandbox Code Playgroud)
使用 switch 语句更改样式:
toggleStyles(el) {
switch (el) {
case "item":
return this.state.selected ? "bg-light-gray" : "";
break;
}
}
Run Code Online (Sandbox Code Playgroud)
然后在我的toggleStyles方法中将它作为道具传递给TachyonsSimpleSelectOption组件的 className 。
该类正在为数组中的所有项目切换,但我只想定位当前单击的项目。
我在这里做错了什么?
您selected错误地使用了状态。
在您的代码中,要确定它是否被选中,您取决于该状态,但您没有指定当前选中了哪些项目。
您可以存储当前选择的索引,而不是保存布尔状态,以便仅影响指定的项目。
这可能是一个粗略的答案,但我希望我能给你一些想法。
在你的渲染上:
{options.map((option, i) => (
<TachyonsSimpleSelectOption
options={options[i]}
key={i}
onClick={() => this.setState({ selectedItem: i })}
selected={this.determineItemStyle(i)}
/>
))}
Run Code Online (Sandbox Code Playgroud)
在将确定selected道具值的函数上:
determineItemStyle(i) {
const isItemSelected = this.state.selectedItem === i;
return isItemSelected ? "bg-light-gray" : "";
}
Run Code Online (Sandbox Code Playgroud)
希望这个答案能给你一些灵感
| 归档时间: |
|
| 查看次数: |
4499 次 |
| 最近记录: |