react mixins编写


var LogMixin = {
    componentWillMount: function () {
        console.log('Component will mount');
    },
    componentDidMount: function () {
        console.log('Component did mount');
    }
};
var AComponent = React.createClass({
    mixins: [LogMixin],
    render: function () {
        return (
            <div>AComponent</div>
        )
    }
});
var BComponent = React.createClass({
    mixins: [LogMixin],
    render: function () {
        return (
            <div>BComponent</div>
        )
    }
});
mixins的详细学习:https://segmentfault.com/a/1190000002704788
Mixins
利用React的Mixins,编写的代码就像这样的:
var LogMixin = {
    componentWillMount: function () {
        console.log('Component will mount');
    },
    componentDidMount: function () {
        console.log('Component did mount');
    }
};
var AComponent = React.createClass({
    mixins: [LogMixin],
    render: function () {
        return (
            <div>AComponent</div>
        )
    }
});
var BComponent = React.createClass({
    mixins: [LogMixin],
    render: function () {
        return (
            <div>BComponent</div>
        )
    }
});
Mixins有点类似AOP。所谓的mixins就是将组件里的方法抽出来。实际上Mixins里的this是指向组件的,使用了Mixins以后,组件也可以调用Mixins里的方法。
组件调用Mixins方法
var Mixin = {
    log:function(){
       console.log('Mixin log');
    }
};
var Component = React.createClass({
    mixins: [Mixin],
    componentWillMount: function () {
        this.log();
    },
    render: function () {
        return (
            <div>Component</div>
        )
    }
});
控制台打印:
$ Mixin log
生命周期方法
Mixins里也可以编写组件生命周期的方法,需要注意的是:Mixins里的方法并不会覆盖组件的生命周期方法,会在先于组件生命周期方法执行。
var Mixin = {
    componentWillMount: function () {
        console.log('Mixin Will Mount');
    }
};
var Component = React.createClass({
    mixins: [Mixin],
    componentWillMount: function () {
        console.log('Component Will Mount');
    },
    render: function () {
        return (
            <div>Component</div>
        )
    }
});
控制台打印:
$ Mixin Will Mount
$ Component Will Mount
使用多个Mixin
组件也可以使用多个Mixin
var AMixin = {
    componentWillMount: function () {
        console.log('AMixin Will Mount');
    }
};
var BMixin = {
    componentWillMount: function () {
        console.log('BMixin Will Mount');
    }
};
var Component = React.createClass({
    mixins: [AMixin,BMixin],
    componentWillMount: function () {
        console.log('Component Will Mount');
    },
    render: function () {
        return (
            <div>Component</div>
        )
    }
});
控制台打印:
$ AMixin Will Mount
$ BMixin Will Mount
$ Component Will Mount
数组引入的顺序,决定了Mxins里生命周期方法的执行顺序。
不允许重复
除了生命周期方法可以重复以外,其他的方法都不可以重复,否则会报错
情景1
var AMixin = {
    log: function () {
        console.log('AMixin Log');
    }
};
var BMixin = {
    log: function () {
        console.log('BMixin Log');
    }
};
var Component = React.createClass({
    mixins: [AMixin,BMixin],
    render: function () {
        return (
            <div>Component</div>
        )
    }
});
情景2
var Mixin = {
    log: function () {
        console.log('Mixin Log');
    }
};
var Component = React.createClass({
    mixins: [Mixin],
    log:function(){
        console.log('Component Log');
    },
    render: function () {
        return (
            <div>Component</div>
        )
    }
});
以上两种情景,都会报错,控制信息如下,所以使用的时候要小心了
 												
											react mixins编写的更多相关文章
- React与ES6(四)ES6如何处理React mixins
		
React与ES6系列: React与ES6(一)开篇介绍 React和ES6(二)ES6的类和ES7的property initializer React与ES6(三)ES6类和方法绑定 React ...
 - React Mixins
		
[React Mixins] ES6 launched without any mixin support. Therefore, there is no support for mixins whe ...
 - 用React Native编写跨平台APP
		
用React Native编写跨平台APP React Native 是一个编写iOS与Android平台实时.原生组件渲染的应用程序的框架.它基于React,Facebook的JavaScript的 ...
 - 4. react 基础 - 编写 todoList 功能
		
编写 TodoList 功能 react 入口 js #src/index.js import React from 'react'; import ReactDOM from 'react-dom' ...
 - 利用React/anu编写一个弹出层
		
本文将一步步介绍如何使用React或anu创建 一个弹出层. React时代,代码都是要经过编译的,我们很多时间都耗在babel与webpack上.因此本文也介绍如何玩webpack与babel. 我 ...
 - react better-scroll 编写类似手机chrome的header显示隐藏效果
		
关键代码 const H = 50; // header的高度 const H2 = H / 2; let cy = 0; class Home extends Component { @observ ...
 - react+mobx 编写 withStoreHistory 装饰器
		
主要作用是向store里面注入一个history对象,方便story里面的函数调用 function withStoreHistory(storeName) { if (!storeName) ret ...
 - react+mobx 编写 Async装饰器
		
使用 // indexStore.js import axios from "axios"; import { from } from "rxjs"; impo ...
 - Node.js建站笔记-使用react和react-router取代Backbone
		
斟酌之后,决定在<嗨猫>项目中引入react,整体项目偏重spa模式,舍弃部分server端的模板渲染,将一部分渲染工作交给前端react实现. react拥有丰富的组件,虽然不如Back ...
 
随机推荐
- web前端开发工程师,你了解吗?
			
web前端开发工程师可以说是一个全新的职业,在IT整个行业中真正受到重视的时间没有超过5年,也正因为这样,大家越来越想了解web前端工程师的前景究竟怎么样?web前端培训就业前景如何?web前端工程师 ...
 - 到底为什么你的APP项目烂尾了?
			
你正在经历迷茫.纠结,或者愤怒.痛苦的情绪,因为,你的APP项目已经或将要烂尾了. 目前的状况只有3种: 项目一直拖到现在,并且很可能继续拖下去 项目在开发期间不断上涨成本 项目完成,BUG多多,不能 ...
 - docker interact example
			
此为docker 第一篇,插下杂七杂八的东西,好找,就这么简单,,,, yum -y install docker-io //install cp /var/tmp/cap.data /var/lib ...
 - mvc ajax dropdownlist onchang事件响应
			
<script type="text/javascript"> $("#Cycle").on("change", functio ...
 - JAVA经典算法40题(1-20)
			
[程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析: 兔子的规律 ...
 - Communication 交流
			
1:请不要立马抗拒别人的观点,先沉默下来思考,在做出回应. 2:在与别人交流的时候,请尽量先让别人同意你的观点,找到共同点,让别人回答 "是";
 - 配置Hibernate二级缓存
			
首先找到配置EHCahe二级缓存需要添加的jar包 hibernate-release-4.1.9.Final→lib→optional→ehcache→下的ehcache-core-2.4.3.ja ...
 - 设置irb和ri
			
设置irb和ri 输入ruby -v查看是否能够显示ruby版本 现在可以 配置irb了. irb是交互式Ruby 的命令行工具,即输入一句就立即执行并给出结果. 默认的irb不够强大,现在给它配置一 ...
 - C#中把Datatable转换为Json的5个代码实例
			
一. /// <summary> /// Datatable转换为Json /// </summary> /// <param name="table" ...
 - Entity FrameWork对有外键关联的数据表的添加操作
			
前天做了一个MVC Entity FrameWork项目,遇到有外键关联的数据编辑问题.当你编辑的时候,按照正常的逻辑,把每个字段的数据都对号入座了,然后点击保存按钮,本以为会顺理成章的编辑数据,但是 ...