在
react
项目开发中常常会遇到有一些代码复用的问题,现介绍几种常见的方式react
low
的方式)一、定义一个高阶组件函数
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} /> ) } } } 复制代码
二、普通组件的代码this
class ReuseComponent1 extends React.Component {
render() {
return (
<> <button>{this.props.number}</button> </> ) } } 复制代码
三、使用高阶组件将普通组件包装spa
export default withCounter(ReuseComponent1);
复制代码
render
函数使组件达到复用一、定义组件code
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>
)
}
}
复制代码
二、组件的调用component
// render里面传递的是一个函数
<ReuseComponent2 render={props => <p>{props.number}</p>} />
复制代码
hooks
hooks
的认识Hook
可让你在不增长组件的状况下达到一样的目的Hook
是一种复用状态逻辑的方式,它不复用 state
自己Hook
的每次调用都有一个彻底独立的 state
Hook
更像是一种约定,而不是一种功能。若是函数的名字以 use
开头,而且调用了其余的 Hook
,则就称其为一个自定义 Hook
hooks
达到代码的复用一、自定义hooks
函数xml
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];
}
复制代码
二、使用jsx
export default () => {
let [number, setNumber] = useNumber();
return (
<div>{number}</div>
)
}
复制代码