fat-cat

组件创建对比, HOC、RenderProps 和 Hooks

HOC

高阶组件是接受一个组件为参数,返回新组件的组件


function withSubscription(WrappedComponent){
    return class extends React.Component {
        constructor(props){
            super(props);
            this.state = {
                data: ''
            }
        }

        setData = data => this.setState({ data })

        render(){
            return (
                <>
                    <WrappedComponent setData={this.setData} {...this.state} {...this.props}/>
                </>
            )
        }
    }
}

优点

缺点

renderProps

组件接受一个函数,这个函数获取组件的 state 实现渲染逻辑


 class RenderPropsWrapperComponent extends Component<any, any> {
    constructor(props) {
        super(props.state)
        this.state = {
            data: ''
        }
    }

    setData = data => {
        this.setState({ data })
    }
    render() {
        return <div>{this.props.render({ state: this.state, setData: this.setData })}</div>
    }
}

const MyComponent = () => {
    return <RenderPropsWrapperComponent render={({state, setData}) => {
        return <div onClick={() => setData('ddd')}>点击改变 data: {state.data}</div>
    }}/>
}

优点

缺点

Hooks

不是用 class 的情况下可以使用 state

优点 & 缺点 见 hooks