设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 重新 试卷 文件
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

【React深入】从Mixin到HOC再到Hook(9)

发布时间:2019-04-11 17:31 所属栏目:21 来源:ConardLi
导读:Redux的connect redux中的connect,其实就是一个HOC,下面就是一个简化版的connect实现: exportconstconnect=(mapStateToProps,mapDispatchToProps)=(WrappedComponent)={ classConnectextendsComponent{ staticco

Redux的connect

redux中的connect,其实就是一个HOC,下面就是一个简化版的connect实现:

  1. export const connect = (mapStateToProps, mapDispatchToProps) => (WrappedComponent) => {  
  2.   class Connect extends Component {  
  3.     static contextTypes = {  
  4.       store: PropTypes.object  
  5.     }  
  6.     constructor () {  
  7.       super()  
  8.       this.state = {  
  9.         allProps: {}  
  10.       }  
  11.     }  
  12.     componentWillMount () {  
  13.       const { store } = this.context  
  14.       this._updateProps()  
  15.       store.subscribe(() => this._updateProps())  
  16.     }  
  17.     _updateProps () {  
  18.       const { store } = this.context  
  19.       let stateProps = mapStateToProps ? mapStateToProps(store.getState(), this.props): {}   
  20.       let dispatchProps = mapDispatchToProps? mapDispatchToProps(store.dispatch, this.props) : {}   
  21.       this.setState({  
  22.         allProps: {  
  23.           ...stateProps,  
  24.           ...dispatchProps,  
  25.           ...this.props  
  26.         }  
  27.       })  
  28.     }  
  29.     render () {  
  30.       return <WrappedComponent {...this.state.allProps} />  
  31.     }  
  32.   }  
  33.   return Connect  

代码非常清晰,connect函数其实就做了一件事,将mapStateToProps和mapDispatchToProps分别解构后传给原组件,这样我们在原组件内就可以直接用props获取state以及dispatch函数了。

使用HOC的注意事项

告诫—静态属性拷贝

当我们应用HOC去增强另一个组件时,我们实际使用的组件已经不是原组件了,所以我们拿不到原组件的任何静态属性,我们可以在HOC的结尾手动拷贝他们:

  1. function proxyHOC(WrappedComponent) {  
  2.   class HOCComponent extends Component {  
  3.     render() {  
  4.       return <WrappedComponent {...this.props} />;  
  5.     }  
  6.   }  
  7.   HOCComponent.staticMethod = WrappedComponent.staticMethod;  
  8.   // ...   
  9.   return HOCComponent;  

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读