REDUX 概念查询:访问 Redux 存储的 2 种或 3 种方法。为什么使用 thunk 并缺少 createStore 参数

问题描述 投票:0回答:1

我正在学习react + redux。我有 3 个相关问题。

query-1: 访问组件内存储的方法。 根据官方文档这里有2种方式

  1. 钩子(使用选择器等)
  2. 连接。

通过在组件中导入 store,我们可以通过 store.getState() 或 store.dispatch() 访问 store

那么不是有3种方法吗?

查询-2:。 我们使用 thunk 以便我们可以在操作创建器中执行异步操作(例如 API 调用)。动作创建者可以返回一个函数(而不是动作)。这是一个简单的例子。

    const fetchUser = (data) => {
        return (dispatch) => {
         axios.post('url', data).then(() => { dispatch(action) }).catch();
        }
       }

我们现在可以从我们的组件中调度 fetchUser(例如:dispatch(fetchUser(payload)) )

为什么我们不能简单地将dispatch函数传递给fetchUser而不是使用thunk,这是一个例子

    const dispatch = useDispatch();
      fetchUser(payload, dispatch)`

询问是因为它工作得很好。

query-3:创建 redux store 时,我们传递 3 个参数,1.reducer 2.[preLoadedState] 3.[enhancers]。 我看到的例子大多如下所示

    const store = createStore(rootReducer, applyMiddleware(thunk))

const store = createStore(rootReducer, compose(applyMiddleware(thunk))) 

由于 applymiddleware 是一个存储增强器,我们可以看到我们已经跳过了第二个参数。对此有什么想法吗?

reactjs react-redux
1个回答
0
投票

Q1

正如您正确指出的,有两种方法可以获得 Redux State:

  • 挂钩(
    useSelector
    )
  • connect

store.dispatch
useDispatch
未访问 Redux 状态。
相反,它允许您通过调度操作来改变 Store 的状态。

将其视为:

  • useSelector
    connect
    是商店的订阅者(他们盲目地接受商店的更改)
  • useDispatch
    store.Dispatch
    是 Store 的处方者(操作告诉 Store 发生了什么变化,以及新值是什么)

Q2

您可以传递

dispatch
对象,这(本身)没有任何问题,但可能会不清楚该对象是什么。 在您使用的两个示例中,它显示了用于
调用操作
dispatch 对象。
Thunk 只是用来处理异步行为,所以你不必(那么多)

Q3

之所以调用

applymiddleware
,是因为你可以将多个东西传递到你的ReduxStore中

例如:

const store = createStore(
  reducer,
  applyMiddleware(promise, thunk)
);
© www.soinside.com 2019 - 2024. All rights reserved.