组合与继承

  1. 若Container内部有内容,React会在props内部增加children属性
  2. 若Container内部有非元素内容,children:非元素内容
  3. 若Container内部有单个元素内容,children:React元素对象
  4. 若Container内部有多个元素内容,children:[]
  • 打印props
  • 情况2:非元素内容
<Container>666</Container>

  • 情况3:单个元素内容
<Container><h1>666</h1></Container>

  • 情况4:多个元素内容
<Container><h1>666</h1><p>888</p>
</Container>

props

  • JSX还可以通过props传递视图元素
  • JSX本质上都会转成React元素(对象 Object)
  • 视图通过props传递的机制类似Vue的插槽,但React没有slot的概念定义
  • React本身就允许通过props传递任何类型的数据到子组件

React样式

  • CSS Module
  • index.module.css
import styles from './index4.module.css'
// 用变量接收
class Container extends React.Component {render() {console.log(this.props)return (<div className={styles.container}><div className={styles.header}>{this.props.header}</div><div className={styles.main}><div className={styles.left}>{this.props.left}</div><div className={styles.right}>{this.props.right}</div></div></div>)}
}
class Header extends React.Component {render() {return <div>Header</div>}
}
class Left extends React.Component {render() {return <div>Left</div>}
}
class Right extends React.Component {render() {return <div>Right</div>}
}
class App extends React.Component {render() {return (<div><Containerheader={<Header />}left={<Left />}right={<Right />}></Container></div>)}
}
ReactDOM.render(<App />,document.getElementById('app')
)
.container {background: #ccc;text-align: center;
}
.header {height: 50px;line-height: 50px;border: 2px dashed #000;
}
.main {display: flex;
}
.left {width: 20%;background: pink;
}
.right {background: skyblue;flex: 1;
}

多层组合

import styles from './index5.module.css'// 多层组合
// Modal是公共的部分,定制的内容作为children传入
function Modal(props) {return (<div className={styles.wrap}><header className={styles.title}>{props.title}</header><div className="main">{props.children}</div></div>)
}
// 注意函数式 props作为参数传入 不用this来访问props
function Alert(props) {return (<div><Modal title={props.title}><p>{props.mainText}</p></Modal></div>)
}
function LoginModal(props) {return (<div><Modal title={props.title}><form><p>用户名:<input type="text" /></p><p>密码:<input type="password" /></p><p><button>登录</button></p></form></Modal></div>)
}
ReactDOM.render(<div><AlertmainText="显示内容"title="显示modal"/><LoginModal title="登录modal"></LoginModal></div>,document.getElementById('app'))

React目前还没有发现有需要组件继承的需求
因为通过children或者传递视图React元素的方式完全可以解决组件组合的问题太;
props可以传递任何类型的数据,所以组合的方式可以替代继承方案。
逻辑部分需要继承或共用:该部分需要自己去编写逻辑抽离的模块、函数、类,单独进行模块导入使用

12 组合与继承、CSS Module相关推荐

  1. class ts 扩展方法_如使用Typescript撸Vue(Vue2 + TS +TSX+CSS module)

    Vue对TS的支持一致不太好,连Vue作者尤大也自嘲真香压错了宝.期待Vue3.0会用TS重构且会有较大改进.不过目前有一些第三方的库可以曲线优化对TS的支持.主要就介绍下过下面两个库来写Vue. 总 ...

  2. 深入浅出Java复用类【从字节码角度看toString调用机制、对象代理、组合与继承、转型、final、初始化】

    这个世界上有10种人:一种是懂二进制的,一种是不懂二进制的 你觉得类是在什么时候被加载的?[访问static域时,为什么?看完9就明白了] 文章目录 1.深入理解Java中toString方法的调用机 ...

  3. java组合与继承始示例_Java 9功能与示例

    java组合与继承始示例 Java 9 is a major release and it has brought us a lot of features for developers. In th ...

  4. java可以多重继承吗_Java中的多重继承与组合vs继承

    java可以多重继承吗 有时我写了几篇有关Java继承,接口和组成的文章. 在这篇文章中,我们将研究多重继承,然后了解组成优于继承的好处. Java中的多重继承 多重继承是创建具有多个超类的单个类的能 ...

  5. 重新精读《Java 编程思想》系列之组合与继承

    Java 复用代码的两种方式组合与继承. 组合 组合只需将对象引用置于新类中即可. 比如我们有一个B类,它具有一个say方法,我们在A类中使用B类的方法,就是组合. public class B {p ...

  6. 项目简单实用方式_组合替代继承_算法切换

    算法切换 关键字:算法切换 意图: 关注算法的封装:将每一个算法封装到单独的类,使他们可以相互替换. 优点:对象(员工)与算法(岗位薪资计算方式)隔离. 缺点:客户端代码必须知道所有算法的实现,并自行 ...

  7. java 中组合与复用_Java 代码复用(组合与继承)

    java中的类都是围绕着类进行的.可以通过创建新类来复用代码,而不必从头编写.可以使用别人已经开发并调试好的类.此方法使用的窍门在于使用类而不破坏现有的程序代码.达到这一目的的方法有两种: 第一种方法 ...

  8. 多重继承java_Java中的多重继承与组合vs继承

    多重继承java 有时我写了几篇有关Java 继承 , 接口和组成的文章. 在这篇文章中,我们将研究多重继承,然后了解组成优于继承的好处. Java中的多重继承 多重继承是创建具有多个超类的单个类的能 ...

  9. Java中的多重继承与组合vs继承

    有时我写了几篇有关Java 继承 , 接口和组成的文章. 在这篇文章中,我们将研究多重继承,然后学习组成优于继承的好处. Java中的多重继承 多重继承是创建具有多个超类的单个类的能力. 与其他一些流 ...

最新文章

  1. vector和deque的区别?
  2. 【算法】学习笔记(5):快速排序
  3. 二分图----最大匹配,最小点覆盖,最大点独立集
  4. [react] 怎么使用Context开发组件?
  5. websocket中发生数据丢失_获取使用关闭代码1006关闭websocket的原因
  6. oracle错误01653,oracle 10g 错误 ORA 01653 的解决过程
  7. 使用.NET Core进行Linux编程3:简介和第2章
  8. eurekaAutoServiceRegistration 异常
  9. 检测UDP端口是否开放的命令
  10. geany怎么创建文件夹_在visual studio中创建win32应用程序
  11. matlab教程易,Matlab经典教程—从入门到精通 中文PDF
  12. mysql五日均线_终于有人把“5日均线做短线”的精髓讲透了!
  13. 英语二 - 常用词根二
  14. Xshell访问连接路由器的服务器
  15. 如何开始创业(催生全美最大孵化器YC的文章)
  16. 中国运动传感器陀螺仪行业市场供需与战略研究报告
  17. IDEA配置远程debug
  18. 面试常考的常用数据结构与算法
  19. 前端程序员和后端程序员有什么不同?我来告诉你薪资待遇差多少
  20. IDEA中Maven依赖下载失败解决方案

热门文章

  1. netty 客户端断开 异常处理_netty案例,netty4.1基础入门篇八《NettyClient半包粘包处理》发数据方式》...
  2. android 如何修改百度导航诱导界面,Android 百度导航SDK
  3. 四叶草引导windows和linux,Windows环境下使用Clover四叶草引导双硬盘安装OSX 10.11.5原版镜像...
  4. Flex4_HttpService组件
  5. 【TCP传输数据-键盘录入】
  6. day36 Pyhton 网络编程03
  7. ListMapSet的操作和遍历 1
  8. day2-列表、元组、字典、字符串
  9. Ansible基础概述
  10. 概率分布之间的距离度量以及python实现(三)