reactjs - 在 React 中使用 map() 生成的组件中隐藏子组件
问题描述
我正在开发一个待办事项应用程序。单击任务时
setState({displayTaskMenu: true})
叫做,
但我还需要在 displayTaskMenu 为 true 的所有其他任务组件上隐藏 taskMenu。
使用 React 执行此操作的正确方法是什么?
这是 Task 组件的渲染方法:
render() {
let { task } = this.props;
return (
<div onClick={this.toggleMenu}>
<div>
{task.label}
{this.state.displayTaskMenu && (<TaskMenu />)}
</div>
</div>
);
}
任务按天排序,Day 组件的渲染为:
render() {
return (
<div style={this.state.dayStyle}>
<span style={this.state.dateStyle}>{this.props.date}</span>
<h1>{this.props.day}</h1>
{this.props.tasks &&
this.props.tasks.map(
(task, i) => <Task key={i} task={task}/>
)}
</div>
);
}
解决方案
由于只有一个Task
组件应该打开它们的TaskMenu
,因此该组件需要通过使用状态Day
来跟踪它所在的位置。Task
因此,Day
组件应该将自定义onClick
函数传递给每个Task
更新其状态。
Day
零件:
render() {
return (
<div style={this.state.dayStyle}>
<span style={this.state.dateStyle}>{this.props.date}</span>
<h1>{this.props.day}</h1>
{this.props.tasks &&
this.props.tasks.map(
(task, i) => <Task
key={i}
task={task}
displayMenu={this.state.displaying == i}
onClick={ () => this.setState({displaying: i}) }/>
)}
</div>
);
}
Task
零件:
render() {
let { task } = this.props;
return (
<div onClick={this.props.onClick}>
<div>
{task.label}
{this.props.displayMenu && (<TaskMenu />)}
</div>
</div>
);
}
使用这种方法,您不再需要组件toggleMenu
中的功能Task
。
推荐阅读
- javascript - 在 JavaScript 中向数组添加唯一对象
- python - 使用LSTM进行迭代分类的正确方法是什么
- perl - perl中哈希内的数组
- javascript - gulp4 的 watch 任务的问题
- xcode - XCode 9.3 缺少时间线滑块
- arduino - 将文本从 PROGMEM 传递到 Arduino 中的功能
- excel - 多个 IF 和 AND
- node.js - 如何使用 fetchMessages() 获取一定数量的消息,然后以某种方式发送它们?
- python-3.x - Discord.py 是否可以在没有人在服务器中的情况下向某人发送直接消息?
- r - R函数trim()的包是什么?