zoukankan      html  css  js  c++  java
  • 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, // by hzy redirectData: login.redirectData, // by hzy })) export default class BasicLayout extends React.PureComponent { // ... }
  • 相关阅读:
    PyQt5--基础篇:用eric6工具实现三级联动效果
    Django--基本篇:项目结构与设计模式(MVC)
    python文件最基础的读写删除
    Begin using git (Part1)
    Begin using git
    通用刷新数据源代码
    Combox程序中自定义数据源
    表内父子关系的递归查询
    C++ 获取数组长度
    Linux在终端里面切换root用户
  • 原文地址:https://www.cnblogs.com/CyLee/p/9308604.html
Copyright © 2011-2022 走看看