当前位置: 首页 > news >正文

【react 全家桶】组合组件

本人大二学生一枚,热爱前端,欢迎来交流学习哦,一起来学习吧。
<专栏推荐>
🔥:js专栏

🔥:vue专栏

🔥:react专栏

文章目录

  • 09 【组合组件】
    • 1.包含关系
    • 2.特例关系问题

09 【组合组件】

1.包含关系

有些组件无法提前知晓它们子组件的具体内容。在 Sidebar(侧边栏)和 Dialog(对话框)等展现通用容器(box)的组件中特别容易遇到这种情况。

我们建议这些组件使用一个特殊的 children prop 来将他们的子组件传递到渲染结果中:

组件标签里面包含的子元素会通过 props.children 传递进来。

function One(props) {return (<div>{props.children}</div>//特殊的children props);
}function Two(props) {return (//这使别的组件可以通过JSX嵌套,来将任意组件作为子组件来传递给他们<One><div>Hello</div><div>World</div></One>
);
}

image-20221025135313079

2.特例关系问题

有些时候,我们会把一些组件看作是其他组件的特殊实例,比如 WelcomeDialog 可以说是 Dialog 的特殊实例。

在 React 中,我们也可以通过组合来实现这一点。“特殊”组件可以通过 props 定制并渲染“一般”组件:

.FancyBorder {padding: 10px 10px;border: 10px solid;
}.FancyBorder-blue {border-color: blue;
}.Dialog-title {margin: 0;font-family: sans-serif;
}.Dialog-message {font-size: larger;
}
function Dialog(props) {return (<FancyBorder color="blue"><h1 className="Dialog-title">{props.title}</h1><p className="Dialog-message">{props.message}</p></FancyBorder>);
}function WelcomeDialog() {return (<Dialogtitle="Welcome"message="Thank you for visiting our spacecraft!" />);
}

在 CodePen 上尝试

组合也同样适用于以 class 形式定义的组件。

function Dialog(props) {return (<FancyBorder color="blue"><h1 className="Dialog-title">{props.title}</h1><p className="Dialog-message">{props.message}</p>{props.children}</FancyBorder>);
}class SignUpDialog extends React.Component {constructor(props) {super(props);this.handleChange = this.handleChange.bind(this);this.handleSignUp = this.handleSignUp.bind(this);this.state = {login: ''};}render() {return (<Dialog title="Mars Exploration Program"message="How should we refer to you?"><input value={this.state.login}onChange={this.handleChange} /><button onClick={this.handleSignUp}>Sign Me Up!</button></Dialog>);}handleChange(e) {this.setState({login: e.target.value});}handleSignUp() {alert(`Welcome aboard, ${this.state.login}!`);}
}

在 CodePen 上尝试

image-20221025135929891

http://www.lryc.cn/news/58985.html

相关文章:

  • VUE_学习笔记
  • 【分布式事务AT模式 SpringCloud集成Seata框架】分布式事务框架Seata详细讲解
  • 系统集成项目管理工程师软考第三章习题(每天更新)
  • FIFO的工作原理及其设计
  • 「UG/NX」Block UI 通过浏览器选择文件File Selection with Browse
  • 面试官:如何搭建Prometheus和Grafana对业务指标进行监控?
  • SQL Server 创建登录账号、创建用户名并为数据库赋予db_owner权限
  • 离散数学_第二章:基本结构:集合、函数、序列、求和和矩阵(1)
  • ChatGPT想干掉开发人员,做梦去吧
  • 尚硅谷大数据技术Hadoop教程-笔记04【Hadoop-MapReduce】
  • Linux信号sigaction / signal
  • 坦克大战第一阶段代码
  • 博客系统前端实现
  • ChatGPT技术原理、研究框架,应用实践及发展趋势(附166份报告)
  • 【屏幕自适应页面适配问题】CSS的@media,为了适应1440×900的屏幕,使用@media解决问题
  • 一篇文章理解堆栈溢出
  • 优化模型验证关键代码27:多旅行商问题的变体-多起点单目的地问题和多汉密尔顿路径问题
  • 快速搭建第一个SpringCloud程序
  • 【离散数学】图论
  • 代码随想录算法训练营第三十七天-贪心算法6| 738.单调递增的数字 968.监控二叉树 总结
  • 【Linux】线程中的互斥锁、条件变量、信号量(数据安全问题、生产消费模型、阻塞队列和环形队列的实现)
  • MySQL8.0的安装和配置
  • LinuxGUI自动化测试框架搭建(三)-虚拟机安装(Hyper-V或者VMWare)
  • 改进YOLO系列:数据增强扩充(有增强图像和标注),包含copypaste、翻转、cutout等八种增强方式
  • c++11 标准模板(STL)(std::stack)(一)
  • C++-c语言词法分析器
  • Maven工具复习
  • 算法总结-深度优先遍历和广度优先遍历
  • 【Linux】Centos安装mvn命令(maven)
  • 驱动保护 -- 通过PID保护指定进程