React propTypes/高阶组件

4/9/2019 reactpropTypes高阶组件

# propTypes

属性验证

  1. 引入
import PropTypes from 'prop-types';

  1. 使用
App.propTypes = { name: PropTypes.string }
import React, { Component } from 'react';
import { render } from 'react-dom';
import PropTypes from 'prop-types';

class App extends Component {
    render() {
        return <div>
            1{this.props.n}
        </div>

    }
}
App.propTypes = { name: PropTypes.string }
render(<App name='lilei' />, document.getElementById('root'))

# 高阶组件

就是一种设计模式。

  • 概念:组件作为函数的参数或者返回值
  • 特点:可以封装公用逻辑
class App1 extends React.Component {
    render() {
        return (
            <div>
                App1
            </div>
        );
    }
}
let LoggerApp = Logger(App1)

class App2 extends React.Component {
    render() {
        return (
            <div>
                App2
            </div>
        );
    }
}
let LoggerApp1 = Logger(App2)

App1App2当作参数传递给Logger()组件,再通过logger()组件渲染出来

  • 案例
import React from 'react';
import { render } from 'react-dom';

function Logger(OldCom) {
    //参数是老的组件(App1,App)返回一个新的组件,但是渲染的还是老的组件
    return class extends React.Component {
        constructor() {
            super();
            this.start = Date.now()
        }
        componentDidMount() {
            console.log(Date.now() - this.start + "ms");
        }
        render() {
            // return React.createElement(OldCom, { ...this.props })
            return <OldCom {...this.props} />
        }
    }

}
class App1 extends React.Component {

    render() {
        return (
            <div>
                App1
            </div>
        );
    }
}
let LoggerApp = Logger(App1)

class App2 extends React.Component {

    render() {
        return (
            <div>
                App2
            </div>
        );
    }
}
let LoggerApp1 = Logger(App2)

render(<><LoggerApp /><LoggerApp1 /></>, window.root)
最后提交: 7/15/2022, 10:42:12 AM