我正在学习react + redux。我有 3 个相关问题。
query-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 是一个存储增强器,我们可以看到我们已经跳过了第二个参数。对此有什么想法吗?
正如您正确指出的,有两种方法可以获得 Redux State:
useSelector
)connect
store.dispatch
或 useDispatch
未访问 Redux 状态。将其视为:
useSelector
和 connect
是商店的订阅者(他们盲目地接受商店的更改)useDispatch
和 store.Dispatch
是 Store 的处方者(操作告诉 Store 发生了什么变化,以及新值是什么)您可以传递
dispatch
对象,这(本身)没有任何问题,但可能会不清楚该对象是什么。
在您使用的两个示例中,它显示了用于 调用操作的
dispatch
对象。之所以调用
applymiddleware
,是因为你可以将多个东西传递到你的ReduxStore中
例如:
const store = createStore(
reducer,
applyMiddleware(promise, thunk)
);