javascript - 对列表的单击项做出反应
问题描述
我有一些问题要通过反应解决任务。
当我单击元素时,我需要更改列表中选定元素的样式。目前,所有元素都在点击时被选中。有人可以帮助我吗?
之后,我需要选择一组项目并更改样式。enter code here
任何想法?
const nodes = [
{id: 0, name: 'aaa', parent: null },
{id: 1, name: 'bbb', parent: 0 },
{id: 2, name: 'ccc', parent: 0 },
{id: 3, name: 'ddd', parent: null },
{id: 4, name: 'eee', parent: 3 },
{id: 5, name: 'fff', parent: 3 },
{id: 6, name: 'ggg', parent: 3 },
{id: 7, name: 'hhh', parent: null },
{id: 8, name: 'iii', parent: 7 },
{id: 9, name: 'jjj', parent: 8 },
{id: 10, name: 'kkk', parent: 9 },
{id: 11, name: 'lll', parent: 9 },
{id: 12, name: 'mmm', parent: 9 },
{id: 13, name: 'nnn', parent: 8 },
{id: 14, name: 'ooo', parent: 13 },
{id: 15, name: 'ppp', parent: 13 },
{id: 16, name: 'qqq', parent: 13 },
{id: 17, name: 'rrr', parent: null },
{id: 18, name: 'sss', parent: 17 },
{id: 19, name: 'ttt', parent: 17 },
{id: 20, name: 'uuu', parent: 19 },
{id: 21, name: 'vvv', parent: 19 },
{id: 22, name: 'www', parent: 17 },
{id: 23, name: 'xxx', parent: 17 },
{id: 24, name: 'yyy', parent: 23 },
{id: 25, name: 'zzz', parent: 23 }
];
class App extends React.Component {
constructor(){
super();
this.state = {
colorDefault: true
}
}
changeColor(){
this.setState({ colorDefault: !this.state.colorDefault })
}
render(){
let nodeColorBlue = {color: '#00f'};
let nodeColorDefault = {color: '#000'};
let nodeColor = this.state.colorDefault ? nodeColorDefault : nodeColorBlue;
const renderNodes = nodes.map(node =>
<li key={node.id}
style={nodeColor}
onClick={this.changeColor.bind(this)}
>
{node.name}
</li>
);
return (
<div className="App">
<ul>{renderNodes}</ul>
</div>
)
}
}
export default App;
解决方案
您需要存储在 id 的活动节点的状态中。
class App extends React.Component {
constructor(){
super();
this.state = {
selectedNodeId: null
}
}
changeColor(selectedNodeId) {
this.setState({ selectedNodeId })
}
render() {
const renderNodes = nodes.map(node =>
<li key={node.id}
style={{ color: node.id === this.state.selectedNodeId ? '#00f' : '#000' }}
onClick={this.changeColor.bind(this, node.id)}
>
{node.name}
</li>
);
return (
<div className="App">
<ul>{renderNodes}</ul>
</div>
)
}
}
推荐阅读
- java - 强制休眠忽略“无效”列
- python - 当用户输入要作为键和值的单词列表时,如何在 Python 中创建字典?
- google-apps-script - 基于另一个值的 Google Sheet App Scrip Update Cell
- laravel - Laravel RouteNotFoundException
- javascript - YII2:模态窗口:未捕获的 ReferenceError:未定义 bootstrapSwitch_9a42af04
- python - 我怎样才能得到chatmessage_thread(我正在使用Django Rest Framework)
- cmd - 如何在 Windows 10 上更改 Anaconda Prompt (cmd) 的提示颜色?
- c# - 如何迭代地将对象添加到数组中
- c - mingw make 在运行可执行文件时给出错误代码-107374181
- c - 有没有办法在 C 中浏览一个文件,并且只有在满足某个字符串时才打印以下行?(初学者)