Mixins 改成使用高阶组件调用
把组件放在另外一个组件的 render 方法里面, 并且利用了 {...this.props} {...this.state} 这些 JSX 展开属性
对比下2种代码:
原始方式:
<!DOCTYPE html>
<html>
<head>
<script src="../build/react.js"></script>
<script src="../build/react-dom.js"></script>
<script src="../build/browser.min.js"></script>
</head>
<body>
<div id="example"></div>
<script type="text/babel">
var intervalMixin = {
componentDidMount: function(){
this.arr = [];
},
setInterval: function(callback, interval){
var token = setInterval(callback, interval);
this.arr.push(token);
return token;
}
}
var S = React.createClass({
mixins: [intervalMixin],
getInitialState: function(){
return {
num: 0
}
},
componentDidMount: function(){
this.setInterval( ()=> this.setState({num: this.state.num+1}), 1000);
},
render: function(){
return <div>
{this.state.num}
</div>
}
});
ReactDOM.render(
<S q="bb" />,
document.getElementById('example') );
</script>
</body>
</html>
高阶组件调用:
<!DOCTYPE html>
<html>
<head>
<script src="../build/react.js"></script>
<script src="../build/react-dom.js"></script>
<script src="../build/browser.min.js"></script>
</head>
<body>
<div id="example"></div>
<script type="text/babel">
// 注意参数 Com 需要第1个字母大写
const Enhance = Com => {
const Res = class extends React.Component {
// 这种写法 ES6 不支持
// static defaultProps = {
// autoPlay: false,
// maxLoops: 10,
// }; // 注意这里有分号 constructor(props, context) {
super(props, context);
this.state = {
time: 0
};
} static a(){ } componentDidMount() {
setInterval(this.tick.bind(this), 1000);
} tick() {
this.setState({
time: this.state.time + 1
});
} render() {
// ...this.props 相当于 text = {this.props.text}
// ...this.state 相当于 time = {this.state.time}
return <Com {...this.props} {...this.state} />;
}
} Res.defaultProps = {
text: 'hello world'
}; return Res;
} class Time extends React.Component {
render() {
return <div>
{this.props.text} {this.props.time}
</div>;
}
} /*
注意这里 A 的值必须为大写,
不能写成 这种形式
ReactDOM.render(
Enhance(Time),
document.getElementById('example') );
)
*/
var A = Enhance(Time);
ReactDOM.render(
<A />,
document.getElementById('example') ); </script>
</body>
</html>
参考地址:
Mixins Are Dead. Long Live Composition
Mixins 改成使用高阶组件调用的更多相关文章
- 浅析为什么用高阶组件代替 Mixins
转载来源 感谢分享 Mixins 引入了无形的依赖 应尽量构建无状态组件,Mixin 则反其道而行之 Mixin 可能会相互依赖,相互耦合,不利于代码维护 不同的 Mixin 中的方法可能会相互冲突 ...
- 聊聊React高阶组件(Higher-Order Components)
使用 react已经有不短的时间了,最近看到关于 react高阶组件的一篇文章,看了之后顿时眼前一亮,对于我这种还在新手村晃荡.一切朝着打怪升级看齐的小喽啰来说,像这种难度不是太高同时门槛也不是那么低 ...
- 高阶组件(Higher-Order Components)
有时候人们很喜欢造一些名字很吓人的名词,让人一听这个名词就觉得自己不可能学会,从而让人望而却步.但是其实这些名词背后所代表的东西其实很简单. 我不能说高阶组件就是这么一个东西.但是它是一个概念上很简单 ...
- 当初要是看了这篇,React高阶组件早会了
当初要是看了这篇,React高阶组件早会了. 概况: 什么是高阶组件? 高阶部件是一种用于复用组件逻辑的高级技术,它并不是 React API的一部分,而是从React 演化而来的一种模式. 具体地说 ...
- react_结合 redux - 高阶函数 - 高阶组件 - 前端、后台项目打包运行
Redux 独立的集中式状态管理 js 库 - 参见 My Git 不是 react 库,可以与 angular.vue 配合使用,通常和 react 用 yarn add redux import ...
- React文档(二十四)高阶组件
高阶组件(HOC)是React里的高级技术为了应对重用组件的逻辑.HOCs本质上不是React API的一部分.它是从React的组合性质中显露出来的模式. 具体来说,一个高阶组件就是一个获取一个组件 ...
- React进阶之高阶组件
前言 本文代码浅显易懂,思想深入实用.此属于react进阶用法,如果你还不了解react,建议从文档开始看起. 我们都知道高阶函数是什么, 高阶组件其实是差不多的用法,只不过传入的参数变成了react ...
- react高阶组件
高阶组件 为了提高组件复用性,在react中就有了HOC(Higher-Order Component)的概念.所谓的高阶组件,其本质依旧是组件,只是它返回另外一个组件,产生新的组件可以对属性进行包装 ...
- 【转】react的高阶组件
React进阶之高阶组件 前言 本文代码浅显易懂,思想深入实用.此属于react进阶用法,如果你还不了解react,建议从文档开始看起. 我们都知道高阶函数是什么, 高阶组件其实是差不多的用法,只 ...
随机推荐
- .NET Core Data Access
.NET Core was released a few months ago, and data access libraries for most databases, both relation ...
- HDU 1205 吃糖果 (数学)
题目链接 Problem Description HOHO,终于从Speakless手上赢走了所有的糖果,是Gardon吃糖果时有个特殊的癖好,就是不喜欢将一样的糖果放在一起吃,喜欢先吃一种,下一次吃 ...
- 9.0docker的数据管理
dopcker容器的数据卷 为容器添加数据卷 sudo docker run -v ~/container data:/data -it ubuntu /bin/bash 查 ...
- MS16-032提权正确方法
原版MS16-032提权会Spawn一个System Shell出来,只能通过Remote Desktop获取.这里修改exploit,直接反弹Shell.注意MS16-032依赖 thread ha ...
- JS阶段测试
JS阶段测试 一.选择题 1.表单中的数据要提交到的处理文件由表单的( c )属性指定. A. method B. name C. action D. 以上都不对 2.在CSS样式 ...
- [Leetcode Week15]Populating Next Right Pointers in Each Node II
Populating Next Right Pointers in Each Node II 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/popul ...
- python基础===zmail,收发邮件的模块
项目地址: GitHub:https://github.com/ZYunH/zmail 介绍: https://mp.weixin.qq.com/s?__biz=MzAxMjUyNDQ5OA==&a ...
- 图论-单源最短路-SPFA算法
有关概念: 最短路问题:若在图中的每一条边都有对应的权值,求从一点到另一点之间权值和最小的路径 SPFA算法的功能是求固定起点到图中其余各点的的最短路(单源最短路径) 约定:图中不存在负权环,用邻接表 ...
- HDU 6118 度度熊的交易计划 最大费用可行流
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6118 题意:中文题 分析: 最小费用最大流,首先建立源点 s ,与超级汇点 t .因为生产一个商品需要 ...
- spring restTemplate 用法
发出get请求,方式一 String url = serverUrl+"/path/path?id={id}"; int i = restTemplate.getForObject ...