Day 27 Redux 接入 component

第 27 天 !

昨天我们把 redux 给接入到我们的专案上,

那今天试着把 store 的 state 给导入到我们的 component 里,

那我们要如何取得 store 的资讯呢?

redux 里, 我们是不能直接的去存取 store 的资料,

所以我们必须去用间接的方式去取得我们想要的资讯,

首先,我们先使用 redux 提供的 connect

connect

connect 会帮我们去连接 store ,并且让我们设定要提取哪些资料跟 action

connect(mapStateToProps?, mapDispatchToProps?, mergeProps?, options?)

  • mapStateToProps?: Function
  • mapDispatchToProps?: Function | Object
  • mergeProps?: Function
  • options?: Object

用法:

connect(mapStateToProps, mapDispatchToProps, mergeProps, options)(Component);

mapStateToProps

当我们希望从 store 上获取 state 时,就需要去设定 mapStateToProps , 格式是 function

它会导入 storestatereturn 的值,会被当成 props , 传给指定的 component

只要 store 发生变化,就会触发这个 function

like:

const mapStateToProps = (state, ownProps) => {
  return {
    ...state,
  };
};

返回值发生变化的话, 就会触发 re-render

如果,mapStateToProps 没有设定, 那 store变化,将不会影响到这个 component

mapDispatchToProps

reduxdispatch 是无法随意引入的,要引入必须从 mapDispatchToProps

它会提供 dispatch 来让我们导入 action

格式是 function

const mapDispatchToProps = (dispatch, ownProps) => {
  return {
    action: (payload) => {
      dispatch(actionCreator(payload));
    },
  };
};

格式是 object:

const mapDispatchToProps = {
  actionCreator: (payload) => ({
    type: '',
    payload,
  }),
};

有两种绑定方式, 一种是 function ,一种是 object

function 比较属於客制化, 就是说假如还想在里面加上额外逻辑,那就选用 function

最後都会把我们设定的当做 props 传入 component

export default function Home({ action }) {
  return <div className={cls.root}></div>;
}

假如没有,其实可以考虑传入 actionCreatorconnect 会帮你自动绑定 dispatch

最後假如不设定,最後会把 dispatch functionprops 传入,

export default function Home({ dispatch }) {
  return <div className={cls.root}></div>;
}

mergeProps

redux 相关的参数都会是 props 传递, 那如何跟 componentprops 做合并,那就必须要去考虑顺序,

原本的顺序是:

  • stateProps
  • dispatchProps
  • ownProps

那我们可以根据我们的需求,去调整这部份,

格式是:

function mergeProps(stateProps, dispatchProps, ownProps) {
  return {
    ...stateProps,
    ...dispatchProps,
    ...ownProps
  }
}

<<:  [从0到1] C#小乳牛 练成基础程序逻辑 Day 27 - File I/O 逐字识别码@ 时间日期 乱数

>>:  30天学会C语言: Day 26-变数住哪里

【Day11】数据展示元件 - Badge

元件介绍 Badge 可以让我们在其 children element 的右上角(预设位置)显示一个...

Kotlin Android 第18天,从 0 到 ML - View Binding

前言: 在Activity 和 Fragment 只要操作 xml 的元件,在 onCreate 时...

新零售行销模式案例,全通路时代来临该如何布局

新零售行销模式案例,全通路时代来临该如何布局,一直以来都在担任辅导顾问为中小企业解决网路行销问题但都...

Day10 主动情蒐-nmap(2)

补充 Nmap 输入与输出 Nmap Scripting Engine (NSE) NSE 用来扩充...

Leetcode 挑战 Day 10 [171. Excel Sheet Column Number]

171. Excel Sheet Column Number 转眼间,来到第十天了!今天这一题是一个...