zoukankan      html  css  js  c++  java
  • React高级特性

    目录:

    1. 容器组件
    2. JSX可展开属性
    3. 动画 : CSS3 Transition
    4. 默认属性
    5. 复用代码:mixin

    容器组件

    React元素也可以包含其他的子元素,这意味着响应的React组件是一个 容器组件。比如:

    //JSX
    <ezpanel title="title">
    <p>this is demo content</p>
    </ezpanel>

    上例中的EzPanel声明了一个面板组件,而面板的内容在定义组件时是不可知的, 这些内容需要被加入到EzPanel渲染后的DOM元素中。

    在React中,使用this.props.children就可以访问React子元素,这样我们 就可以轻松地将未知的React子元素包含到容器中:

    var EzPanel = React.createClass({
      render : function(){
        return <div class="ez-panel">
            {this.props.children}
            </div>;
      }
    });

    JSX可展开属性

    在JSX中,有时一个React元素的属性很多,比如在示例代码中设置音量推子组件 的属性:

    //JSX
    <div classname="ez-slider" onmousedown="{this.onMouseDown}" onmousemove="{this.onMouseMove}" onmouseup="{this.onMouseUp}"></div>

    JSX有一个很好的特性让我们可以给React元素设置一个JSON对象作为属性包,这个属性 包将按照字段展开为分立的React元素的属性,被称为可展开属性。使用如下 方式在React元素上声明一个可展开属性,其中propbag是一个JSON对象:

    <any {...propbag}=""></any>

    比如,前面的示例使用可展开属性的方式改写为:

    //定义属性包
    var props = {
      className : "ez-slider",
      onMouseDown : this.onMouseDown,
      onMouseUp : this.onMouseUp,
      onMouseMove : this.onMouseMove
    };
     
    //传入属性包
    var rel = <div {...props}=""></div>;

    动画 : CSS3 Transition

    在React中可以使用CSS3 Transition为组件增加过渡效果。不过,由于 CSS3 Transition需要DOM属性的变化才能触发,所以我们需要将属性改变后的React 元素重新渲染到真实DOM上,才可以触发过渡效果。

    大致来讲,在React中使用CSS3 Transition有以下步骤:

    1. 为元素声明transition样式
    2. 设置属性初始值,第一次渲染元素
    3. 设置属性目标值,第二次渲染元素

    在示例代码中,为了实现过渡效果,我们使用了一个内部状态mounted 来实现第二次渲染:当初次渲染完成功后,通过setState()方法我们触发 了再次渲染。第二次渲染时,我们重新设置了样式,以便激活过渡过程。

    需要注意的一点是window.getComputedStyle()方法的应用,调用 这个方法的目的是刷新DOM的样式,以便确保之前设置的样式已经被应用到DOM 上了。

    默认属性

    对于一个组件来讲,通常应该有一些默认的属性值,这样即使调用者没有 显示的指定某个属性值,依然可以通过this.props获得该值。这简化了属性值 缺失引起的错误检查。

    在React中定义组件时,使用getDefaultProps()方法声明默认属性:

    var EzDemoComp = React.createClass({
      //设置默认属性值
      getDefaultProps:function(){
        return {
          value : 0
        }
      },
      render: function(){
        //使用this.props.value访问属性,如果用户没有设置,则该值为默认值
        return <div classname="ez-demo">{this.props.value}</div>;
      }
    });
    //创建React元素时没有指定属性值
    React.render(<ezdemocomp></ezdemocomp>,
    document.querySelector("#content"));

    复用代码:mixin

    如果多个组件的实现代码中有一些公共的部分,那么可以使用React的mixin特性 将这部分代码提出来公用。mixin是掺合,混合,糅合的意思,即可以将一个对象的属性 拷贝到另一个对象上。

    在React中,使用mixin有两个步骤:

    • 定义一个mixin对象

    mixin对象是一个JavaScript对象,这个对象的属性将被拷贝到React组件类的原型对象上:

    var EzLoggerMixin = {
        log:function(){
            //sth. happened here.
        }
    };
    • 在定义组件时使用这个mixin对象

    在使用React.createClass()定义组件时,给传入的原型对象设置mixins属性:

    React.createClass({
        mixins:[EzLoggerMixin],
        render:function(){
            //your render stuff.
        }
    });

    mixins属性是一个数组,这意味着可以指定多个mixin对象,但记住这些 mixin对象、以及在createClass()中传入的原型对象,它们的属性不能同名。

     参考资料:http://www.dwz.cn/27ZDWr

  • 相关阅读:
    案例分享:只因在 update 语句中误用一个双引号,生产数据竟然都变成了 0
    快速了解Service Mesh微服务架构实现服务间gRPC通信
    实战|如何优雅地自定义Prometheus监控指标
    微服务架构中如何快速构建一个数据报告服务?
    k8s微服务接入SkyWalking,三分钟教你怎么玩!
    Python基础-27-面向对象
    Python基础-21-字典
    Jmeter JSON提取器
    Jmeter正则表达式提取器
    访问github,修改host文件
  • 原文地址:https://www.cnblogs.com/jasonnode/p/4468203.html
Copyright © 2011-2022 走看看