高阶组件是接受一个组件为参数,返回新组件的组件
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}/>
</>
)
}
}
}
组件接受一个函数,这个函数获取组件的 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>
}}/>
}
不是用 class 的情况下可以使用 state