提问人:bakrall 提问时间:2/19/2023 最后编辑:bakrall 更新时间:2/20/2023 访问量:37
作为 thunk 的动作创建者如何接收商店的调度方法?
How does action creator which is a thunk receive a store's dispatch method?
问:
我正在学习 redux,关于内部逻辑,有一件事让我感到困惑 - 如果 thunk 是参数,反之亦然,那么 thunk 如何接收作为参数?下面是一个示例代码:dispatch
dispatch
我正在创建一个动作创建器,它是一个 thunk(它不返回一个动作本身,而是另一个最终返回动作的函数)。我将其定义为接收函数作为参数,如下所示(代码被简化为示例):dispatch
export const fetchPosts = () => {
return async (dispatch) => {
const response = await fetch('some url');
dispatch({type: 'FETCH_POSTS', payload: response});
}
}
然后,当我从“react-redux”获取函数时,我在 App.js 文件中使用这个 thunk:dispatch
import { useDispatch } from 'react-redux';
import { fetchPosts } from './store/posts-actions';
function App() {
const dispatch = useDispatch();
useEffect(() => {
dispatch(fetchPosts());
},[dispatch]);
...
}
我不是在作为论据传递给.我正在传递.这是我不明白的部分。dispatch
fetchPosts()
fetchPosts()
dispatch
如果 receive as argument if 是参数,反之亦然,如何接收作为参数?fetchPosts
dispatch
fetchPosts
dispatch
答:
0赞
markerikson
2/20/2023
#1
这在 Redux 文档页面中进行了介绍,内容涉及使用 Thunks 和 Redux Fundamentals,第 6 部分:异步逻辑和数据获取。
Redux thunk 中间件会查找函数被传入的任何时间,拦截该函数,然后将其作为参数调用:dispatch
(dispatch, getState)
// standard middleware definition, with 3 nested functions:
// 1) Accepts `{dispatch, getState}`
// 2) Accepts `next`
// 3) Accepts `action`
const thunkMiddleware =
({ dispatch, getState }) =>
next =>
action => {
// If the "action" is actually a function instead...
if (typeof action === 'function') {
// then call the function and pass `dispatch` and `getState` as arguments
return action(dispatch, getState)
}
// Otherwise, it's a normal action - send it onwards
return next(action)
}
评论