1. 使用props属性和组合

1. props.children

在需要自定义内容的地方渲染props.children

function Dialog(props) { //通用组件
return (
<div>
<h1 className="dialog-title">{props.title}</h1>
<p className="dialog-message">
{props.message}
</p>
{
props.children //在组件最后用户可以自定义添加内容
}
</div>
)
}
class SignUpDialog extends React.Component {
constructor(props) {
super(props);
this.state={
loginName: ''
}
}
handleChange = (e) => {
this.setState({
loginName: e.target.value
})
}
render() {
return (
<Dialog
title="welcom"
message="Thank you for visiting our spacecraft!"
>
<input
type="text"
value={this.state.loginName}
onChange={this.handleChange}
/>
<button>
注册
</button>
</Dialog>
)
}
}

2. 将组件作为变量传递到另一个组件

function Dialog(props) { //通用组件
return (
<div>
{
props.selfDefine || <h1 className="dialog-title">{props.title}</h1>
}
<p className="dialog-message">
{props.message}
</p>
</div>
)
}
class SignUpDialog extends React.Component {
render() {
const h2 = <h2>这是自定义的标题</h2>;
return (
<Dialog
title="welcom"
message="Thank you for visiting our spacecraft!"
selfDefine={h2}
/>
)
}
}

2. 高阶组件

详情

3. Render props

统指属性值是函数的属性,返回值用于指定渲染内容。

当将函数作为属性时,如果函数直接定义在属性上,每次render都会生成一个新的函数;会导致props始终处于变化状态。这时和PureComponent冲突。
解决办法:
1)将PureComponent改为Component
2) 函数传入函数实例。在外部定义好函数后传入

属性名称可以随意指定,children也可以是一个返回渲染内容的函数。

这个属性很多时候可以替代高阶组件;也可以和高阶组件一起使用。

import img from './cat.png';
import './index.css'; class Cat extends React.Component {
render() {
const { x, y} = this.props.mouse;
return (
<img style={{position: 'absolute', top:y, left: x }} src={img} />
)
}
} // 公用组件;相当于高阶组件的公共部分
class Mouse extends React.Component{
constructor(props) {
super(props);
this.state = {
x: 50,
y: 0
}
}
handleMouseOver = (e) => {
this.setState({
x: e.clientX,
y: e.clientY
})
}
render() {
return (
<div style={{height: '100%'}} onMouseMove={this.handleMouseOver}>
<h1>查看鼠标</h1>
{this.props.renderMouse(this.state)}
</div>
)
}
}
class MouseTracker extends React.Component {
render() {
return(
<Mouse renderMouse={(mouse) => <Cat mouse={mouse}/>}/>
)
}
}

提高React组件的复用性的更多相关文章

  1. Vue 组件复用性和slot

    1.组件可复用 2.slot元素作为组件模板之中的内容分发插槽,元素自身可以被替换 <!DOCTYPE html> <html lang="en"> < ...

  2. vue-混入( mixin 更方便的组件功能复用方法)的使用

    前言 vue 中组件完成了样式和功能的综合复用,通过自定义指令完成了一部分功能的复用,本文总结一下混入在vue项目开发中提供的非常便利的功能复用. 正文 1.混入的分类 (1)全局混入 <div ...

  3. React组件性能调优

    React是一个专注于UI层的框架,它使用虚拟DOM技术,以保证它UI的高速渲染:使用单向数据流,因此它数据绑定更加简单:那么它内部是如何保持简单高效的UI渲染呢?这种渲染机制有可能存在什么性能问题呢 ...

  4. 第二章 设计高质量的React组件

    第二章 设计高质量的React组件 高质量React组件的原则和方法: 划分组件边界的原则: React组件的数据种类: React组件的生命周期. 2.1 易于维护组件的设计要素 1.高内聚:指的是 ...

  5. React组件复用的方式

    React组件复用的方式 现前端的工程化越发重要,虽然使用Ctrl+C与Ctrl+V同样能够完成需求,但是一旦面临修改那就是一项庞大的任务,于是减少代码的拷贝,增加封装复用能力,实现可维护.可复用的代 ...

  6. 提高测试脚本复用性降低DOM结构引起路径变化的影响

    问题描述 在定位元素时直接复制的xpath. 但是因为下面这些原因导致之前引用的路径失效, 不得不频繁修改脚本重新定位元素, 大降低了脚本的复用性, 也增加了维护的成本: 1. UI修改 (比如增加了 ...

  7. 七个不可错过的React组件库与开发框架

    React是如今最火爆的前端技术,而React最棒的一个特点就是有大量功能丰富的组件库和开发框架可用.从按钮到卷轴到工具条,应有尽有,而且这些组件可以各行其是,也可以组装成复杂的UI,你也可以把UI分 ...

  8. 总结 React 组件的三种写法 及最佳实践 [涨经验]

    React 专注于 view 层,组件化则是 React 的基础,也是其核心理念之一,一个完整的应用将由一个个独立的组件拼装而成. 截至目前 React 已经更新到 v15.4.2,由于 ES6 的普 ...

  9. React组件开发(一)初识React

    *React不属于MVC.MVVM,只是单纯的V层. *React核心是组件(提高代码复用率.降低测试难度.代码复杂度). *自动dom操作,状态对应内容. *React核心js文件:react.js ...

随机推荐

  1. xsy 2414【CF587C】Duff in the Army

    Description [题目描述]: 最近有一场战争发生,Duff是战争里一名士兵,Malek是她的长官. 他们的国家——Andarz Gu有n个城市(编号为1到n),总共有n-1条道路,每条道路连 ...

  2. python 之 并发编程(生产者消费者模型、守护进程的应用)

    9.8 生产者消费者模型 该模型中包含两类重要的角色: 1.生产者:将负责造数据的任务比喻为生产者 2.消费者:接收生产者造出的数据来做进一步的处理的被比喻成消费者 实现生产者消费者模型三要素:1.生 ...

  3. python — 线程

    目录 1.线程基础知识 2 Thread 类 3 锁 4 队列 1.线程基础知识 1.1 进程与线程的区别 进程: 创建进程 时间开销大 销毁进程 时间开销大 进程之间切换 时间开销大 线程: 线程是 ...

  4. golang之文件结尾错误(EOF)

    函数经常会返回多种错误,这对终端用户来说可能会很有趣,但对程序而言,这使得情况变得复杂.很多时候,程序必须根据错误类型,作出不同的响应.让我们考虑这样一个例子:从文件中读取n个字节.如果n等于文件的长 ...

  5. Arm-Linux 移植 alsa

    ref : https://www.cnblogs.com/yutingliuyl/p/6718875.html https://blog.csdn.net/yuanxinfei920/article ...

  6. Win自带mastc远程Cenots7桌面

    1.Centos7安装桌面 yum -y groups install "GNOME Desktop" startx 2.安装xrdp 操作需要root用户权限,所以,我们先切换为 ...

  7. Unity_如何判断应用设备内存小于1G(内容可定制为根据机器配置进行不同LOD)

    直接上脚本,需要用的时候在需要的地方调用就好. 如: //获取设别的最大内存,作为判断LOD等级和决定1G以下设备不能进游戏 #if UNITY_ANDROID && !UNITY_E ...

  8. TortoiseSVN-1.7.12.24070-x64-svn-1.7.9安装包和汉化包

    链接:https://pan.baidu.com/s/1NbrQW44N_kTh7VN0Fz0zVA 提取码:nhd9 先安装TortoiseSVN-1.7.12.24070-x64-svn-1.7. ...

  9. HTML中的标题<h1>标签的用法!

    在HTML中,<h1>标签是命名标题的元素,并且在网页中起到了很重要的作用,但是不要只是因为想要弄成黑粗字体就使用<h1>标题标签这样不好.如果说你还想要做完网站后需要进一步做 ...

  10. 【Mybatis】 入门

    一.概述 1.1 JDBC 1.2 JDBC编程中问题 1.3 MyBatis介绍 1.4 Mybatis架构 二.MyBatis入门程序 2.1 需求 2.2 引入MyBatis依赖 2.3 配置 ...