zoukankan      html  css  js  c++  java
  • React.js终探(七)(完)

    我们在前面介绍了组件的各种特性,这一节我们来说说多组件的情况。

    在实际开发中,我们的组件难免会遇到有公共部分的情况,如果是个别情况还好,但如果数量比较多的话,那这时候,就需要公用了。

    怎么公用呢?

    React为我们提供了它的方法。

    mixin:复用代码

    可以把部分代码提出来公用。mixin是掺合混合的意思,即可以把一个对象的属性拷贝到另一个对象上。

    使用mixin有两步:

    • 定义一个mixin对象,即如
    1 var EzLoggerMixin = {
    2     log:function(){
    3         //sth. happened here.
    4     }
    5 };
    • 使用React.createClass时,给传入的原型对象设置mixins属性
    1 React.createClass({
    2     mixins:[EzLoggerMixin],
    3     render:function(){
    4         //your render stuff.
    5     }
    6 });

    可以看出,mixins属性是一个数组,表示可以传多个mixin对象,但是注意注意,传入的mixin对象中,不要有同名属性

    来个例子:

    定义一个日志的mixin对象,React组件使用mixin获得日志的输入能力。

    上代码:

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4     <meta charset="utf-8">
     5     <title>Component Mixins</title>
     6     <script src="lib/react.js"></script>
     7     <script src="lib/JSXTransformer.js"></script>
     8     <style>
     9         .ez-logger{
    10             position:fixed;
    11             left:0px;
    12             bottom:0px;
    13             height:100px;
    14             width:100%;
    15             background:#000;            
    16             color:#fff;
    17         }
    18     </style>
    19 </head>
    20 <body>
    21     <div id="content"></div>
    22     <script type = "text/jsx">
    23         //日志mixin
    24         var EzLoggerMixin = {
    25             log:function(txt){
    26                 //按需撞见日志板DOM对象
    27                 if(!window._logger_){
    28                     var el = window._logger_  = document.createElement("pre");
    29                     el.className = "ez-logger";
    30                     document.body.appendChild(el);
    31                 }
    32                 //计算时间戳
    33                 var time = new Date,
    34                     h = time.getHours(),
    35                     m = time.getMinutes(),
    36                     s = time.getSeconds(),
    37                     ts = [h,m,s].join(":");
    38                     
    39                 //this.constructor.displayName表示组件的显示名,React自动设置该属性    
    40                 var compName = "[" + this.constructor.displayName + "]";
    41                 
    42                 //输出到日志板
    43                 window._logger_.innerText = [window._logger_.innerText, ts + compName + " : " + txt].join("
    ");
    44             }
    45         };
    46         //组件1定义
    47         var EzDemo1Comp = React.createClass({
    48             mixins : [EzLoggerMixin], //使用日志mixin
    49             componentDidMount : function(){
    50                 this.log("component rendered!");
    51             },
    52             render : function(){
    53                 this.log("rendering the component");
    54                 return     <div>
    55                             <p>This is a demo component.</p>
    56                         </div>;
    57             }
    58         });
    59         //组件2定义
    60         var EzDemo2Comp = React.createClass({
    61             mixins : [EzLoggerMixin],  //使用日志mixin
    62             componentDidMount : function(){
    63                 this.log("component rendered!");
    64             },
    65             render : function(){
    66                 this.log("rendering the component");
    67                 return     <div>
    68                             <p>This is another demo component.</p>
    69                         </div>;
    70             }
    71         });
    72         //渲染
    73         React.render(
    74             <div>
    75                 <EzDemo1Comp/>
    76                 <EzDemo2Comp/>
    77             </div>,
    78             document.querySelector("#content"));
    79     </script>
    80 </body>
    81 </html>

    值得一提的是:

    this.constructor.displayName是获得当前组件的显示名,这个是React自动设置的属性

    好了,探索React的学习的系列大体就到这里了。之后必要的话,会继续深入写React相关的。谢谢大家思密达

  • 相关阅读:
    软件工程第十四周学习进度条
    软件工程第十五周学习进度条
    课堂练习-买书价格最低
    找水王2
    Struts结合马士兵视频的学习经验
    Spring结合马士兵视频的学习经验
    浅谈 《大型网站技术架构》 五六七章
    以《淘宝网》为例,描绘质量属性的六个常见属性场景
    浅谈架构漫谈
    软件架构设计师工作流程
  • 原文地址:https://www.cnblogs.com/galenyip/p/4589971.html
Copyright © 2011-2022 走看看