0

假设如果我使用 调度一个动作dispatch(),我知道它reducer()被称为 which has an action object and current state as parameters。我想知道什么叫减速器功能?在 reducer 函数之前和 dispatch 函数之后调用了哪些函数?在reducer函数返回新状态之后,之后调用了哪些函数?这个新状态去哪儿了?在 reducer 函数返回新状态后是否还会返回一些usestate()东西?useselector()

4

1 回答 1

2

我想知道什么叫减速器功能?在 reducer 函数之前和 dispatch 函数之后调用了哪些函数

dispatch() 确实“调用”了每个减速器。它使用一个事件系统,所有的 reducer 都在监听这个事件(这一切都在幕后)。

尽管如此,您仍然可以编写一段代码,将其插入到调度调用和reducers 捕获动作之间。

它被称为中间件。

中间件可以拦截由 dispatch 触发的任何动作,它也可以访问 store。

在中间件结束时,您只需使用回调来告诉流程继续。您需要将您的操作传递给它,以便您的减速器最终可以被调用并接收操作。

这是记录任何 dispatch() 发送的任何操作的中间件示例

const logger = store => next => action => {
  console.log('dispatching', action)
  let result = next(action)
  console.log('next state', store.getState())
  return result
}

要使其工作,您需要将中间件传递给您的 redux 配置,以便可以调用它们。

在reducer函数返回新状态之后,之后调用了哪些函数,这个新状态去哪里了?

如果您查看您的 redux 配置,您会在某个地方看到您组合了所有减速器(通常称为根减速器)。

const combinedReducers = combineReducers({ reducerA, reducerB })
const store = createStore(combinedReducers )

Redux 使用这种 reducer 组合来填充 store,所以无论什么时候 reducer 返回它的结果,它都可以保存在“store”中

在 reducer 函数返回新状态后,usestate() 和 useselector() 是否也会返回一些东西?

useSelector()是一个可以在 store 中读取的 hooks。(Store 包含你的 reducer 的最新结果,并且每次在 store 中有修改时都会更新)

useState()与redux无关。它与反应有关。使用 useState,您可以在组件的本地状态中进行读写。

它返回一个你的状态和这个状态的设置器。

const {myPieceOfState, setMyPieceOfState} = useState({ something :'a default value for myPieceOfState'})
于 2021-02-19T12:05:14.297 回答