React 之mapStateToProps、mapDispatchToProps以及connect的理解

参考文档:https://dvajs.com/guide/

 

示例:

const mapStateToProps = (state) => ({

 instanceItem: state['@instanceItem'].item,

})

const mapDispatchToProps = (dispatch) => ({

 fetchList(params) {

   dispatch({

     type: getEffectName('fetchList'),

     payload: params

   })

 }

})

@connect(mapStateToProps, mapDispatchToProps)

class Test extends Component {

  static propTypes = {}
  static defaultProps = {}
  state = {}
  render() {
  return (
  <div>
     <h1 style = {myStyle}>测试</h1>,
    </div>
    )
}
}

export default Test

顾名思义:

mapStateToProps:将需要的state的节点注入到与此视图数据相关的组件(props)上.也即用于建立 State 到 Props 的映射关系。这个函数中要注入全部的models,你需要返回一个新的对象,挑选该组件所需要的models。

mapDispatchToProps:将需要绑定的响应事件注入到组件上(props上)。
connect:它的作用是将组件和models结合在一起。将models中的state绑定到组件的props中。并提供一些额外的功能,譬如dispatch。connect 方法返回的也是一个 React 组件,通常称为容器组件。因为它是原始 UI 组件的容器,即在外面包了一层 State。

关于connect 的作用机制,可以简单地描述为:

  • 将数据模型中的 state 映射到组件 props
  • 将数据模型中的 reducer 或 effect 以 dispatch(action) 的形态映射到组件 props
  • 当数据模型中的 state 发生变化时,通知关联的组件进行更新

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`mapStateToProps`和`mapDispatchToProps`都是用于将Redux store中的statedispatch函数映射到React组件的props中。 `mapStateToProps`函数将Redux store中的state映射到React组件的props中。它接收一个参数`state`,该参数是当前Redux store的state。`mapStateToProps`函数返回一个对象,对象的key是React组件需要的props,value是从Redux store中获取的state。下面是一个简单的例子: ```javascript import { connect } from "react-redux"; import MyComponent from "./MyComponent"; const mapStateToProps = (state) => ({ count: state.count, }); export default connect(mapStateToProps)(MyComponent); ``` 在这个例子中,`mapStateToProps`函数将Redux store中的`count`状态映射到React组件的`count` props中。`connect`函数将`mapStateToProps`函数返回的对象合并到React组件的props中。 `mapDispatchToProps`函数将Redux store中的dispatch函数映射到React组件的props中。它接收一个参数`dispatch`,该参数是Redux store的`dispatch`函数。`mapDispatchToProps`函数返回一个对象,对象的key是React组件需要的props,value是一个函数,该函数接收一个参数并调用Redux store的dispatch函数。下面是一个简单的例子: ```javascript import { connect } from "react-redux"; import { increment } from "./actions"; import MyComponent from "./MyComponent"; const mapDispatchToProps = (dispatch) => ({ increment: () => dispatch(increment()), }); export default connect(null, mapDispatchToProps)(MyComponent); ``` 在这个例子中,`mapDispatchToProps`函数将Redux store的`increment` action creator函数映射到React组件的`increment` props中。当React组件调用`this.props.increment()`时,它将调用Redux store的`dispatch`函数并传递`increment` action。 如果`mapStateToProps`函数和`mapDispatchToProps`函数都需要使用,可以将它们作为`connect`函数的参数传递。下面是一个完整的例子: ```javascript import { connect } from "react-redux"; import { increment } from "./actions"; import MyComponent from "./MyComponent"; const mapStateToProps = (state) => ({ count: state.count, }); const mapDispatchToProps = (dispatch) => ({ increment: () => dispatch(increment()), }); export default connect(mapStateToProps, mapDispatchToProps)(MyComponent); ``` 在这个例子中,`connect`函数将`mapStateToProps`函数返回的对象和`mapDispatchToProps`函数返回的对象合并到React组件的props中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值