react dva 的 connect 与 @connect

转载

react dva 的 connect 与 @connect

https://dvajs.com/guide/introduce-class.html#connect-方法

connect的作用是将组件和models结合在一起。将models中的state绑定到组件的props中。并提供一些额外的功能,譬如dispatch

connect 的使用

【connect 方法返回的也是一个 React 组件,通常称为容器组件。因为它是原始 UI 组件的容器,即在外面包了一层 State。

connect 方法传入的第一个参数是 mapStateToProps 函数,该函数需要返回一个对象,用于建立 State 到 Props 的映射关系。】

简而言之,connect接收一个函数,返回一个函数。

第一个函数会注入全部的models,你需要返回一个新的对象,挑选该组件所需要的models。

export default connect(({ user, login, global = {}, loading }) => ({
currentUser: user.currentUser,
collapsed: global.collapsed,
fetchingNotices: loading.effects['global/fetchNotices'],
notices: global.notices
}))(BasicLayout);

// 简化版
export default connect(
({ user, login, global = {}, loading }) => { return {
currentUser: user.currentUser,
collapsed: global.collapsed,
fetchingNotices: loading.effects['global/fetchNotices'],
notices: global.notices
}
}
)(BasicLayout);

//////////////////////////////////////
@connect的使用

其实只是connect的装饰器、语法糖罢了。

// 将 model 和 component 串联起来

export default connect(({ user, login, global = {}, loading }) => ({
currentUser: user.currentUser,
collapsed: global.collapsed,
fetchingNotices: loading.effects['global/fetchNotices'],
notices: global.notices,
menuData: login.menuData, // by hzy
redirectData: login.redirectData, // by hzy
}))(BasicLayout);


// 改为这样(export 的不再是connect,而是class组件本身。),也是可以执行的,但要注意@connect必须放在export default class前面:
// 将 model 和 component 串联起来

@connect(({ user, login, global = {}, loading }) => ({
currentUser: user.currentUser,
collapsed: global.collapsed,
fetchingNotices: loading.effects['global/fetchNotices'],
notices: global.notices,
menuData: login.menuData,
redirectData: login.redirectData,
}))

export default class BasicLayout extends React.PureComponent { // ...
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Getting Started Use the Current Stable Version (7.1) Buil...
    Leonzai阅读 1,977评论 0 3
  • 今天黄黄被表白,开心的耶。我们寝室能有人被表白真的挺开心的。 班级送别会,送走那些曾经有缘的人。 说散就散,散了的...
    剪拣阅读 231评论 0 0
  • 学习本身就是反人性的 辉哥写过一篇文章《成长是反人性的》,其中提到减肥、学习、投资都是反人性的。长期正确的事情一开...
    瘦子居酒屋阅读 1,646评论 1 29
  • 生日: 2008年8月22日 绩妈、迎迎和妮妮 据悉,妮妮有着双胞胎的基因,2008年8月22日,雌性大熊猫成绩产...
    氢电公敌阅读 1,479评论 0 0
  • 几两下肚喉咙有些醉 扑通跳出一块顽石 猴头 猴头 且去大闹天宫 呱唧 咔嚓 石头 石头 闭嘴 封眼 堵耳 石头沾酒...
    红尘静水阅读 193评论 0 0