我是新的React和redux。我已经看过很多关于react redux的在线教程,但仍然无法理解action和reducer是如何连接的。如果我是对的,我们在容器/组件中导入action,我们在创建存储的文件中导入reducer。所以container - action之间有一个连接,reducer和store之间也有一个连接,但是在action文件中我们不导入reducer。所以动作是如何连接到减速器的。我知道我们有一个类型的行动,这将是检查开关的情况下,在减速机。但是它是如何传递给reducer的。
3条答案
按热度按时间wnvonmuf1#
Action-Action可以更新状态
redux store公开了一个
dispatch
函数,它最终 Package 了一个action creator。useDispatch
钩子返回dispatch
,你自己 Package 动作减速器
reducer形成状态树,从传递到redux存储的根reducer开始。“连接”(常规地)经由xlm 3 nlx和xlm 4 nlx HOC进行。(* 现在可以从
useDispatch
钩子中获取dispatch
*)Reducer是纯函数,它接受两个参数,当前状态和一个动作,并返回下一个状态。
当你分派一个action creator时,它会将action对象传递给root reducer。action对象通过整个状态树传递,任何处理action
type
的reducer都会使用它。pn9klfpd2#
TLDR:dispatch函数以
action
为参数,调用currentReducer(..., action)
。当调用creteStore(
reducer
)时,返回的对象包含dispatch
和subscribe
函数。当你(或react-redux库)调用
subscribe(listener)
时,redux会记住你的监听器函数(在React的情况下,监听器必须确保组件使用新的props,context,state或refs重新呈现-取决于具体的实现)。当使用
dispatch(action)
分派一个动作时,分派函数将调用reducer(action, state)
,修改redux内部的currentState,然后调用每个listener()
。oaxa6hgo3#
TLDR; store的内部机制根据action的类型识别应该处理调度的action的reducer函数。
在这里,我将举一个制作计数器应用程序的经典例子。我们创建了一个动作创建器,它使用特定类型分派动作:
现在,我们创建一个以状态和动作为参数的reducer。
1.在组件中,调用
dispatch(incrementCounter)
。这将分派由incrementCounter操作创建者返回的操作。1.store的内部机制会根据action的类型来识别应该处理调度的action的reducer函数。
1.store调用对应的reducer函数,将当前状态和分派的动作作为参数传递。
1.在reducer内部,使用switch语句(或其他逻辑)来确定如何基于动作的类型更新状态。
1.如果状态发生了变化,React Redux(或其他连接的组件)会触发依赖于状态的订阅组件的重新渲染。