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

时间: 2024-10-07 06:38:44

Mixins 改成使用高阶组件调用的相关文章

React17React高阶组件的链式调用

使用情况如下: * 编写一个高阶组件进行属性的添加 * 编写一个高级组件编写生命周期 * 然后将以上两个高阶组件进行链式调用 示例 * 编写高阶组件进行属性的添加(返回的是函数组件): * 编写高阶组件重写生命周期(返回的是class组件): *链式调用 widthLearnReact为HOC组件添加了属性,widthLiseCycle为添加了属性的HOC组件重写了componentDidMount生命周期 注这种高阶组件链式调用太过麻烦,下篇随笔采用装饰器的语法处理这种问题. 原文地址:htt

聊聊React高阶组件(Higher-Order Components)

使用 react已经有不短的时间了,最近看到关于 react高阶组件的一篇文章,看了之后顿时眼前一亮,对于我这种还在新手村晃荡.一切朝着打怪升级看齐的小喽啰来说,像这种难度不是太高同时门槛也不是那么低的东西如今可不多见了啊,是个不可多得的 zhuangbility的利器,自然不可轻易错过,遂深入了解了一番. 概述 高阶组件的定义 React 官网上对高阶组件的定义: 高阶部件是一种用于复用组件逻辑的高级技术,它并不是 React API的一部分,而是从React 演化而来的一种模式. 具体地说,

高阶组件

前言 本文代码浅显易懂,思想深入实用.此属于react进阶用法,如果你还不了解react,建议从文档开始看起. 我们都知道高阶函数是什么, 高阶组件其实是差不多的用法,只不过传入的参数变成了react组件,并返回一个新的组件. A higher-order component is a function that takes a component and returns a new component. 形如: const EnhancedComponent = higherOrderComp

【转】react的高阶组件

前言 本文代码浅显易懂,思想深入实用.此属于react进阶用法,如果你还不了解react,建议从文档开始看起. 我们都知道高阶函数是什么, 高阶组件其实是差不多的用法,只不过传入的参数变成了react组件,并返回一个新的组件. A higher-order component is a function that takes a component and returns a new component. 形如: const EnhancedComponent = higherOrderComp

react.js 高阶组件----很简单的实例理解高阶组件思想

/* * 高阶组件其实是一个函数,传进去的一个组件,返回一个新组件 * 实现不同组件中的逻辑复用, * 将一些可以单独抽离的逻辑处理给要返回的新组件里面复用 * 然后将单独的组件,传递给新组件 * */ import React, {Component} from 'react' import ReactDOM from 'react-dom' //高阶组件定义,里面return 返回新组件 function local(Comp,key){ class Proxy extends Compon

react高阶组件的理解

[高阶组件和函数式编程] function hello() { console.log('hello jason'); } function WrapperHello(fn) { return function() { console.log('before say hello'); fn(); console.log('after say hello'); } } // hello 这时候等于 WrapperHello函数中返回的 匿名函数 // 在设计模式中这种操作叫做 装饰器模式 // 高

react:高阶组件wrappedComponent

什么是高阶组件? 高阶部件是一种用于复用组件逻辑的高级技术,它并不是 React API的一部分,而是从React 演化而来的一种模式. 具体地说,高阶组件就是一个接收一个组件并返回另外一个新组件的函数! 解决什么问题? 随着项目越来越复杂,开发过程中,多个组件需要某个功能,而且这个功能和页面并没有关系,所以也不能简单的抽取成一个新的组件,但是如果让同样的逻辑在各个组件里各自实现,无疑会导致重复的代码.比如页面有三种弹窗一个有title,一个没有,一个又有右上角关闭按钮,除此之外别无它样,你总不

高阶组件的应用

高阶组件深入理解 高阶组件就是一个函数,传给它一个组件,它返回一个新的组件.新的组件使用传入的组件作为子组件.首先根据定义我们明白它就是一个函数,而且它必须有返回值,返回值是一个组件,当然这里我们高阶组件可以嵌套. 其实高阶组件就是把公用的一些部分提出来,把修改的部分以参数的形势传进去,在这里可能有人会说这那需用什么高阶组件,我自己封装一个组件也可以达到同样的效果,简单的组件在这里你可能通过封装来实现,但是我举两个例子大家在想一下怎么通过组建封装来实现: 1.antd组件的form组件, 2.我

react 高阶组件之小学版

高阶组件  多么高大上的概念,一般用来实现组件逻辑的抽象和复用,在很多三方库(redux)中都被使用到,但是开发普通有任务项目时,如果能合理使用高阶组件,也会显著的提高代码质量. 我们今天就用最简单的逻辑来搞一搞这个家伙 我们先看一个栗子,看看这个家伙是如何进行逻辑复用的: 现在有一个组件MyComponent,需要从LocalStorage中获取数据, 然后渲染到界面. 一般情况下,我们可以这样实现: 代码很简单,但当其他组件也需要从LocalStorage中获取同样的数据展示出来时,每个组件