提高React组件的复用性
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组件的复用性的更多相关文章
- Vue 组件复用性和slot
1.组件可复用 2.slot元素作为组件模板之中的内容分发插槽,元素自身可以被替换 <!DOCTYPE html> <html lang="en"> < ...
- vue-混入( mixin 更方便的组件功能复用方法)的使用
前言 vue 中组件完成了样式和功能的综合复用,通过自定义指令完成了一部分功能的复用,本文总结一下混入在vue项目开发中提供的非常便利的功能复用. 正文 1.混入的分类 (1)全局混入 <div ...
- React组件性能调优
React是一个专注于UI层的框架,它使用虚拟DOM技术,以保证它UI的高速渲染:使用单向数据流,因此它数据绑定更加简单:那么它内部是如何保持简单高效的UI渲染呢?这种渲染机制有可能存在什么性能问题呢 ...
- 第二章 设计高质量的React组件
第二章 设计高质量的React组件 高质量React组件的原则和方法: 划分组件边界的原则: React组件的数据种类: React组件的生命周期. 2.1 易于维护组件的设计要素 1.高内聚:指的是 ...
- React组件复用的方式
React组件复用的方式 现前端的工程化越发重要,虽然使用Ctrl+C与Ctrl+V同样能够完成需求,但是一旦面临修改那就是一项庞大的任务,于是减少代码的拷贝,增加封装复用能力,实现可维护.可复用的代 ...
- 提高测试脚本复用性降低DOM结构引起路径变化的影响
问题描述 在定位元素时直接复制的xpath. 但是因为下面这些原因导致之前引用的路径失效, 不得不频繁修改脚本重新定位元素, 大降低了脚本的复用性, 也增加了维护的成本: 1. UI修改 (比如增加了 ...
- 七个不可错过的React组件库与开发框架
React是如今最火爆的前端技术,而React最棒的一个特点就是有大量功能丰富的组件库和开发框架可用.从按钮到卷轴到工具条,应有尽有,而且这些组件可以各行其是,也可以组装成复杂的UI,你也可以把UI分 ...
- 总结 React 组件的三种写法 及最佳实践 [涨经验]
React 专注于 view 层,组件化则是 React 的基础,也是其核心理念之一,一个完整的应用将由一个个独立的组件拼装而成. 截至目前 React 已经更新到 v15.4.2,由于 ES6 的普 ...
- React组件开发(一)初识React
*React不属于MVC.MVVM,只是单纯的V层. *React核心是组件(提高代码复用率.降低测试难度.代码复杂度). *自动dom操作,状态对应内容. *React核心js文件:react.js ...
随机推荐
- 人工智能对人类有哪些影响 选择Python入门怎样
人工智能对人类有哪些影响?选择Python入门怎样?人工智能是科技时代进步的产物,也是目前人们非常关注的一个产业.那么,随着人工智能的发展,对人类生活的有哪些影响呢? 1.人工智能对文化产业影响 据了 ...
- Code First 下自动更新数据库结构(Automatic Migrations)
示例 Web.config <?xml version="1.0" encoding="utf-8"?> <configuration> ...
- mysql授权单个表权限
mysql> create user haochengtest@'%' identified by 'haocheng.123'; Query OK, 0 rows affected (0.01 ...
- 获取ApplicationContext进而获取Ioc实例方法
在正常情况下 spring管理的类可直接调用Ioc容器中的实例,但在一些特殊情况下(例如拦截器中获取dao实例),Bean需要实现某个功能,但该功能必须借助于Spring容器才能实现,此时就必须让该B ...
- 以EntifyFramework DBFirst方式访问SQLite数据库
前面一直在找EF Code First方式来访问SQLite数据库,后面得出的结论是SQLite不支持 Code First, 虽然有非官方的库SQLite.CodeFirst可以使用,但一直没搞成功 ...
- Gogs + Drone 实现CI/CD(CD)
前文已经实现CI部分,本文继续以Asp.Net Core实现CD部分. 创建gogs仓库 首先在gogs创建一个空项目drone-ci-demo,本地新建一个asp.net core项目,并且在与.c ...
- IClientMessageInspector IDispatchMessageInspector
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- interface Part1(接口详解)
1. 在日常生活中,手机.笔记本电脑.平板电脑等电子产品提供了不同类型的接口用于充电或者连接不同的设备. 不同类型接口的标准不一样,例如电压.尺寸等. 2. 在C#语言中,接口也会定义一种标准,如果需 ...
- springboot笔记04——读取配置文件+使用slf4j日志
前言 springboot常用的配置文件有yml和properties两种,当然有必要的时候也可以用xml.我个人更加喜欢用yml,所以我在这里使用yml作为例子.yml或properties配置文件 ...
- python 内置函数和匿名函数
内置函数 截止到python版本3.6.2,现在python一共为我们提供了68个内置函数. Built-in Functions abs() dict() help() min() ...