React16.8组件代码复用的4种方式

栏目: 服务器 · 发布时间: 5年前

内容简介:一、关于自定义二、使用自定义
  • 1、定义一个高阶组件

    import React from 'react';
    
    function withCounter(Component) {
      return class extends React.Component {
        state = { number: 0 };
        componentDidMount() {
          setInterval(() => {
            this.setState({ number: this.state.number + 1 });
          }, 1000);
        }
        render() {
          return (
            <Component number={this.state.number} />
          )
        }
      }
    }
    复制代码
  • 2、普通组件的代码

    class ReuseComponent1 extends React.Component {
      render() {
        return (
          <>
            <button>{this.props.number}</button>
          </>
        )
      }
    }
    复制代码
  • 3、使用高阶组件将普通组件包装

    export default withCounter(ReuseComponent1);
    复制代码

三、使用 render 函数使组件达到复用

  • 1、定义组件

    import React, { Component } from 'react'
    
    export default class ReuseComponent2 extends Component {
      state = { number: 0 };
    
      componentDidMount() {
        setInterval(() => {
          this.setState({ number: this.state.number + 1 });
        }, 1000);
      }
      render() {
        return (
          <div>
            {/* 直接调用传递过来的render属性(这里传递的是一个函数) */}
            {this.props.render({ number: this.state.number })}
          </div>
        )
      }
    }
    复制代码
  • 2、组件的调用

    // render里面传递的是一个函数
    <ReuseComponent2 render={props => <p>{props.number}</p>} />
    复制代码

四、使用自定义 hooks

一、关于自定义 hooks 的认识

  • 1、有时候我们会想要在组件之间重用一些状态逻辑
  • 2、自定义 Hook 可以让你在不增加组件的情况下达到同样的目的
  • 3、 Hook 是一种复用状态逻辑的方式,它不复用 state 本身
  • 4、事实上 Hook 的每次调用都有一个完全独立的 state
  • 5、自定义 Hook 更像是一种约定,而不是一种功能。如果函数的名字以 use 开头,并且调用了其他的 Hook ,则就称其为一个自定义 Hook

二、使用自定义 hooks 达到代码的复用

  • 1、自定义 hooks 函数

    import React, { useState, useEffect } from 'react';
    
    /**
     * 自定义hooks,以use开头的名字并且使用内置的hooks
     */
    function useNumber() {
      let [number, setNumber] = useState(0);
    
      useEffect(() => {
        setInterval(() => {
          setNumber(number => number + 1);
        }, 1000);
      }, []);
    
      return [number, setNumber];
    }
    复制代码
  • 2、使用

    export default () => {
      let [number, setNumber] = useNumber();
      return (
        <div>{number}</div>
      )
    }
    复制代码

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Mastering Regular Expressions, Second Edition

Mastering Regular Expressions, Second Edition

Jeffrey E F Friedl / O'Reilly Media / 2002-07-15 / USD 39.95

Regular expressions are an extremely powerful tool for manipulating text and data. They have spread like wildfire in recent years, now offered as standard features in Perl, Java, VB.NET and C# (and an......一起来看看 《Mastering Regular Expressions, Second Edition》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具