zoukankan      html  css  js  c++  java
  • 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>
            )
        }
    });
    

    以上两种情景,都会报错,控制信息如下,所以使用的时候要小心了

     
  • 相关阅读:
    8种CSS清除浮动的方法优缺点分析
    link和@import的区别
    删除表及删除表中数据的方法
    【HTML5】---【HTML5提供的一些新的标签用法以及和HTML 4的区别】
    【HTML】---HTML语义化
    【HTML5】页面点击按钮添加一行 删除一行 全选 反选 全不选
    第四篇:python 高级之面向对象初级
    第三篇:python高级之生成器&迭代器
    第二篇:python高级之装饰器
    第一篇:python高级之函数
  • 原文地址:https://www.cnblogs.com/fireporsche/p/6227897.html
Copyright © 2011-2022 走看看