国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Reactjs Mixins

xfee / 718人閱讀

摘要:拋磚引玉實現一個日志功能。一般都會抽出公共的部分。看起來挺完美的,實際上還是有個問題代碼的耦合性太強像這種日志功能應該同業(yè)務分離,不應該直接出現在業(yè)務代碼中。如果做過開發(fā),應該很容易想到一個概念面向切面編程。

拋磚引玉

實現一個日志功能。

組件在掛載前打印 Component will mount

組件掛載后打印 Component did mount

不能忍受的寫法
var AComponent = React.createClass({
    componentWillMount: function () {
        console.log("Component will mount");
    },
    componentDidMount: function () {
        console.log("Component did mount");
    },
    render: function () {
        return (
            
AComponent
) } }); var BComponent = React.createClass({ componentWillMount: function () { console.log("Component will mount"); }, componentDidMount: function () { console.log("Component did mount"); }, render: function () { return (
BComponent
) } });

看到上面的代碼,直接吐血而亡啊,寫的是什么幾把玩意兒。還好只寫了兩個組件,要是多個組件,相同的代碼就會重復多遍。相信大家看到上面的代碼也會發(fā)現一個致命的問題:可維護性太差差差!

改進

相信大家都不會寫出上面的代碼,如果真有人會那樣寫,請允許我呵呵你。一般都會抽出公共的部分。

var Log = {
    componentWillMount: function () {
        console.log("Component will mount");
    },
    componentDidMount: function () {
        console.log("Component did mount");
    }
};


var AComponent = React.createClass({
    componentWillMount: function () {
        Log.componentWillMount();
    },
    componentDidMount: function () {
        Log.componentDidMount();
    },
    render: function () {
        return (
            
AComponent
) } }); var BComponent = React.createClass({ componentWillMount: function () { Log.componentWillMount(); }, componentDidMount: function () { Log.componentDidMount(); }, render: function () { return (
BComponent
) } });

看起來挺完美的,實際上還是有個問題:代碼的耦合性太強!像這種日志功能應該同業(yè)務分離,不應該直接出現在業(yè)務代碼中。如果做過Java開發(fā),應該很容易想到一個概念:AOP—面向切面編程。

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 (
            
AComponent
) } }); var BComponent = React.createClass({ mixins: [LogMixin], render: function () { return (
BComponent
) } });

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 (
            
Component
) } });

控制臺打印:

$ Mixin log
生命周期方法

Mixins里也可以編寫組件生命周期的方法,需要注意的是:Mixins里的方法并不會覆蓋組件的生命周期方法,會在先于組件生命周期方法執(zhí)行。

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 (
            
Component
) } });

控制臺打印:

$ 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 (
            
Component
) } });

控制臺打印:

$ AMixin Will Mount
$ BMixin Will Mount
$ Component Will Mount

數組引入的順序,決定了Mxins里生命周期方法的執(zhí)行順序。

不允許重復

除了生命周期方法可以重復以外,其他的方法都不可以重復,否則會報錯

情景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 (
            
Component
) } });
情景2
var Mixin = {
    log: function () {
        console.log("Mixin Log");
    }
};

var Component = React.createClass({
    mixins: [Mixin],
    log:function(){
        console.log("Component Log");
    },
    render: function () {
        return (
            
Component
) } });

以上兩種情景,都會報錯,控制信息如下,所以使用的時候要小心了

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/85654.html

相關文章

  • 翻譯 | 從 ReactJS 到 React-Native—兩者的主要差異是什么?

    摘要:跟非常相似,但是在開始嘗試你第一個之前,也需要了解兩者之間的一些差異。推薦的方式是使用提供的。能用到組件中的或者上以啟用這個組件的觸摸事件。 華翔,Web前端開發(fā)工程師著作權歸作者所有,轉載請聯系作者獲得授權。 showImg(https://segmentfault.com/img/bVUliz?w=640&h=235); React-Native已經誕生有兩年左右了,自從適配了An...

    darkerXi 評論0 收藏0
  • Reactjs快速上手

    摘要:當或的值發(fā)生變化時觸發(fā),并通過返回值確定是否觸發(fā)更新事件但初始化組件時不會觸發(fā)。該方式僅在未使用的時候適用。 React簡述 React是由fackbook開放的一個構建用戶接口的javascript類庫,其主要目的是為了開發(fā)隨時間數據不斷變化的大型應用程序,許多開發(fā)者將React視作為MVC模式中的V.2011年React開始被fackbook工程師著手開發(fā),并作為內部使用,2013...

    zzzmh 評論0 收藏0
  • React 、 ES6 - 介紹(第一部分)

    摘要:下一步我們將結果輸出到文件。這是我們用編寫的第一個非常簡單的組建。使用將創(chuàng)建的組建導出以便在其它地方能夠正常導入使用。 這是React和ECMAScript6結合使用系列文章的第一篇。 本文出自從零到壹全棧部落 下面是所有系列文章章節(jié)的鏈接: React 、 ES6 - 介紹(第一部分) React類、ES7屬性初始化(第二部分) React類,方法綁定(第三部分) ES6中Reac...

    pingink 評論0 收藏0
  • REST API設計理念與 Python Mixin模式

    摘要:飛機就是一種交通工具,可飛行的能力是是飛機的屬性,通過繼承接口來獲取語言可沒有接口功能,但是它可以多重繼承。說是,因為從語法上看,的確是通過多重繼承實現的。所以從含義上理解,只是一個,不是一個。比如飛機照樣可以載客,就是不能飛了 REST API設計理念 showImg(https://segmentfault.com/img/remote/1460000019923606);sho...

    waruqi 評論0 收藏0
  • REST API設計理念與 Python Mixin模式

    摘要:飛機就是一種交通工具,可飛行的能力是是飛機的屬性,通過繼承接口來獲取語言可沒有接口功能,但是它可以多重繼承。說是,因為從語法上看,的確是通過多重繼承實現的。所以從含義上理解,只是一個,不是一個。比如飛機照樣可以載客,就是不能飛了 REST API設計理念 showImg(https://segmentfault.com/img/remote/1460000019923606);sho...

    iflove 評論0 收藏0

發(fā)表評論

0條評論

xfee

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<