reactjs 在react redux中action和reducers是如何相互连接的

qncylg1j  于 2023-05-22  发布在  React
关注(0)|答案(3)|浏览(153)

我是新的React和redux。我已经看过很多关于react redux的在线教程,但仍然无法理解action和reducer是如何连接的。如果我是对的,我们在容器/组件中导入action,我们在创建存储的文件中导入reducer。所以container - action之间有一个连接,reducer和store之间也有一个连接,但是在action文件中我们不导入reducer。所以动作是如何连接到减速器的。我知道我们有一个类型的行动,这将是检查开关的情况下,在减速机。但是它是如何传递给reducer的。

wnvonmuf

wnvonmuf1#

  • 高级概述 *
    Action-Action可以更新状态
{ type: ACTION_TYPE, somePayload: payload }

redux store公开了一个dispatch函数,它最终 Package 了一个action creator。

mapDispatchToProps = dispatch => {
  return {
    someWrappedAction: () => dispatch(actionCreatorFn()),
    someOtherWrappedAction: val => dispatch(otherActionCreatorFn(val)),
  }
}

useDispatch钩子返回dispatch,你自己 Package 动作

const dispatch = useDispatch()

<button onClick={() => dispatch(someActionCreatorFn())}>
  Do Action
</button>

减速器

reducer形成状态树,从传递到redux存储的根reducer开始。“连接”(常规地)经由xlm 3 nlx和xlm 4 nlx HOC进行。(* 现在可以从useDispatch钩子中获取dispatch *)
Reducer是函数,它接受两个参数,当前状态和一个动作,并返回下一个状态。

(currentState, action) => nextState
  • 那么mapDispatchToProps中的每个分派是如何连接到相应的reducer的... *

当你分派一个action creator时,它会将action对象传递给root reducer。action对象通过整个状态树传递,任何处理action type的reducer都会使用它。

pn9klfpd

pn9klfpd2#

TLDR:dispatch函数以action为参数,调用currentReducer(..., action)
当调用creteStore(reducer)时,返回的对象包含dispatchsubscribe函数。
当你(或react-redux库)调用subscribe(listener)时,redux会记住你的监听器函数(在React的情况下,监听器必须确保组件使用新的props,context,state或refs重新呈现-取决于具体的实现)。
当使用dispatch(action)分派一个动作时,分派函数将调用reducer(action, state),修改redux内部的currentState,然后调用每个listener()

oaxa6hgo

oaxa6hgo3#

TLDR; store的内部机制根据action的类型识别应该处理调度的action的reducer函数。

在这里,我将举一个制作计数器应用程序的经典例子。我们创建了一个动作创建器,它使用特定类型分派动作:

export const incrementCounter = () => {
  return {
    type: 'INCREMENT_COUNTER',
  };
};

现在,我们创建一个以状态和动作为参数的reducer。

const initialState = {
  counter: 0,
};

const rootReducer = (state = initialState, action) => {
  switch (action.type) {
    case 'INCREMENT_COUNTER':
      return {
        ...state,
        counter: state.counter + 1,
      };
    default:
      return state;
  }
};

1.在组件中,调用dispatch(incrementCounter)。这将分派由incrementCounter操作创建者返回的操作。

  1. Redux存储接收分派的动作。
    1.store的内部机制会根据action的类型来识别应该处理调度的action的reducer函数。
    1.store调用对应的reducer函数,将当前状态和分派的动作作为参数传递。
    1.在reducer内部,使用switch语句(或其他逻辑)来确定如何基于动作的类型更新状态。
  2. reducer返回一个新的状态对象或当前状态的修改版本。
  3. Redux store使用reducer返回的新状态更新其内部状态。
    1.如果状态发生了变化,React Redux(或其他连接的组件)会触发依赖于状态的订阅组件的重新渲染。

相关问题