javascript - 将 props 传输到同级组件
问题描述
我希望当前名称和名称显示在模态标题用户的姓氏中,而不是%用户名%。我不能完成这个任务。解决问题后,我给出了如何优化代码的想法。
代码:
class App extends React.Component {
state= {
show: false,
};
showModal = () =>{
this.setState({
show: !this.state.show
});
};
render() {
const users = this.props.data.users;
const userList = users.map(user => <User key={user.id} user={user} onOpen={this.showModal} name={user.name} surname={user.surname}/>)
return (
<div className="container">
{userList}
{this.state.show ? < Modal onClose={this.showModal} show={this.state.show}/> : null}
</div>
)
}
}
class User extends React.Component{
onOpen = () => {
this.props.onOpen && this.props.onOpen();
};
render(){
const {avatar, name, surname, city, country} = this.props.user;
return(
<div className="box">
<img src={avatar} alt="" className="avatar" />
<h3 className="box-title">{`${name} ${surname}`}</h3>
<p className="box-description">{`${city}, ${country}`}</p>
<div className="button-wrap">
<a href="#" className="button" onClick={()=> this.onOpen()} >Report user</a>
</div>
</div>
)
}
}
class Modal extends React.Component {
onClose = () => {
this.props.onClose && this.props.onClose();
};
render() {
if(!this.props.show){
return null;
}
// tak wygląda struktura HTML dla modal boxa
return (
<div className="modal">
<div className="modal-background"></div>
<div className="modal-content">
<div className="box">
<h3 className="modal-title">Report user</h3>
<textarea rows="6"></textarea>
<div className="button-wrap">
<a href="#" className="button button-link" onClick={() => {
this.onClose()}}>Cancel</a>
<a href="#" className="button ml-auto" onClick={()=> alert("ok")}>Report</a>
</div>
</div>
</div>
</div>
)
}
}
ReactDOM.render(<App data={data} />, document.querySelector("#app"))
解决方案
使用状态ReportUsr
来存储您要报告的用户,由this.ReportUsr
App 类中的函数更改,然后将函数作为道具传递给 User 类以使用该User 组件实例 的值Report
调用它OnClick
surname
然后从 App 类创建的模态组件具有内容,即 App.state.ReportUsr
< Modal onClose={this.showModal} show={this.state.show} >{this.state.ReportUsr}</ Modal>
LiveExample https://h4i1e.csb.app/
推荐阅读
- ios - 通知服务扩展是否需要任何功能?
- javascript - 如何获取触发了 jstree 上下文菜单的节点?
- c# - 尝试使用 Canvas Bitmap 将 C# 中的图片保存到字节数组,但它只输出 2^16 个字节
- python - 其他文件中的函数
- redis - Redis Exporter:Redis 上 Prometheus 的加密端口是什么?
- python - 将字符串项附加到 Pandas 列中的列表
- winforms - 如何在 Devexpress 的 ComboBoxEdit 中选择项目
- pyspark - 如何将数据框的所有列设置为空值
- git - RStudio 中的 Git SSH 使用 GUI 按钮工作,但不使用 shell
- linux - 在 Linux 5.7 中实现系统调用时出错