zoukankan      html  css  js  c++  java
  • Mixins 改成使用高阶组件调用

    把组件放在另外一个组件的 render 方法里面, 并且利用了 {...this.props} {...this.state} 这些  JSX 展开属性

    对比下2种代码:

    原始方式:

    <!DOCTYPE html>
    <html>
      <head>
        <script src="../build/react.js"></script>
        <script src="../build/react-dom.js"></script>
        <script src="../build/browser.min.js"></script>
      </head>
      <body>
        <div id="example"></div>
        <script type="text/babel">
          var intervalMixin = {
            componentDidMount: function(){
              this.arr = [];
            },
            setInterval: function(callback, interval){
              var token = setInterval(callback, interval);
              this.arr.push(token);
              return token;
            }
          }
          var S = React.createClass({
            mixins: [intervalMixin],
            getInitialState: function(){
              return {
                num: 0
              }
            },
            componentDidMount: function(){
              this.setInterval( ()=> this.setState({num: this.state.num+1}), 1000);
            },
            render: function(){
              return <div>
                {this.state.num}
              </div>
            }
          });
          ReactDOM.render(
            <S q="bb" />,
            document.getElementById('example') );
        </script>
      </body>
    </html>

    高阶组件调用:

    <!DOCTYPE html>
    <html>
      <head>
        <script src="../build/react.js"></script>
        <script src="../build/react-dom.js"></script>
        <script src="../build/browser.min.js"></script>
      </head>
      <body>
        <div id="example"></div>
        <script type="text/babel">
          // 注意参数 Com 需要第1个字母大写
          const Enhance = Com => {
            const Res = class extends React.Component {
              // 这种写法 ES6 不支持
              // static defaultProps = {
              //     autoPlay: false,
              //     maxLoops: 10,
              // }; // 注意这里有分号
    
              constructor(props, context) {
                super(props, context);
                this.state = {
                  time: 0
                };
              }
    
              static a(){
    
              }
    
              componentDidMount() {
                setInterval(this.tick.bind(this), 1000);
              }
    
              tick() {
                this.setState({
                  time: this.state.time + 1
                });
              }
    
              render() {
                // ...this.props 相当于 text = {this.props.text}
                // ...this.state 相当于 time = {this.state.time}
                return <Com {...this.props} {...this.state} />;
              }
            }
    
            Res.defaultProps = {
                text: 'hello world'
            };
    
            return Res;
          }
    
          class Time extends React.Component {
            render() {
              return <div>
                {this.props.text} {this.props.time}
              </div>;
            }
          }
    
          /*
            注意这里 A 的值必须为大写,
            不能写成 这种形式
            ReactDOM.render(
              Enhance(Time),
              document.getElementById('example') );
            )
          */
          var A = Enhance(Time);
          ReactDOM.render(
            <A />,
            document.getElementById('example') );
    
        </script>
      </body>
    </html>

    参考地址:

    传递 Props

    Mixins Are Dead. Long Live Composition

  • 相关阅读:
    Android ViewPager使用详解
    Android开发 侧边滑动菜单栏SlidingMenu结合Fragment
    ArrayList
    Gstreamer中加入�x265编解码器
    python fabric实现远程操作和部署
    java.text.NumberFormat使用方法
    Delphi 2007体验!
    Codeforces 360C Levko and Strings dp
    FindWindow使用方法
    C++ Primer 学习笔记_87_用于大型程序的工具 --异常处理
  • 原文地址:https://www.cnblogs.com/zhengming2016/p/6661800.html
Copyright © 2011-2022 走看看