Redux Action Creator 和 Dispatch 与语法混淆

Redux Action Creator and Dispatch confusion with syntax

我在理解这个 productListCreator 语法时遇到一些问题。使用 thunk,我正在学习的教程说 thunk 允许我们在函数内编写异步函数。

productListCreator 是一个 returns 以分派作为参数的异步函数。

但是当你将 call/use 与 dispatch(productListCreator()) 一起使用时,我很困惑。

productListCreator 没有传递调度参数。相反,它被传递到 useDispatch 挂钩中。

所以对我来说,代码是说 useDispatch() 接受 productListCreator 函数并运行它,它没有为“调度”传递任何参数。

import axios from 'axios'

const productListCreator = () => async(dispatch) => {  
    try {
        dispatch({
            type: 'PRODUCT_LIST_REQUEST'
        })

        const { data } = await axios.get('/api/products')
        
        dispatch({
            type: 'PRODUCT_LIST_SUCCESS',
            payload: data
        }) 
    } catch (error) {
        dispatch({
            type: 'PRODUCT_LIST_ERROR',
            payload: error.message
        })
    }
}


export default productListCreator
const dispatch = useDispatch()
    
    // Retrieve all products at reload
    useEffect(()=>{
        dispatch(productListCreator())
    },[])

productListCreator 是一位“thunk 动作创作者”。它定义了“thunk 函数”,returns 它。那个“thunk 函数”是传递给 dispatch 的。然后 thunk 中间件拦截 thunk 函数,调用它,并将 (dispatch, getState) 作为参数传入。

我建议通读新的 "Writing Logic with Thunks" docs page,其中解释了 thunk 的工作原理。