【问题标题】:"Actions must be a plain object" redux thunk on react native“动作必须是普通对象”redux thunk on react native
【发布时间】:2019-11-11 11:39:12
【问题描述】:

尝试将操作分派给另一个操作时出现此错误。知道我做错了什么吗?

商店

const configureStore = () => {
    return createStore(
        rootReducer,
        composeWithDevTools(
            applyMiddleware(thunk)
        )
    );
}

动作

export const setLocation = (coords, maxDistance) => {
    return (dispatch) => {
        return dispatch(setFilteredFacilities(coords, maxDistance))
            .then(() => dispatch({
                type: SET_LOCATION,
                payload: {
                    latitude: coords.latitude,
                    longitude: coords.longitude
                }
            }));
    };
};

index.js

<Provider store={store}>
    <App />
</Provider>

【问题讨论】:

    标签: react-native redux redux-thunk


    【解决方案1】:

    您正在调度一个函数以及 .then 中的结果。您无法调度该函数。

    export const setLocation = (coords, maxDistance) => 
    { 
         return (dispatch) =>
         {  
             setFilteredFacilities(coords, maxDistance)
             .then(() =>
                   dispatch({ type: SET_LOCATION, 
                       payload: { latitude: coords.latitude, longitude: coords.longitude }
                     })
              ); 
         }  
    };
    

    【讨论】:

    • 但是如果函数是一个动作,我该如何处理呢?因为当我不调度它时,该函数已运行但未被 redux 拾取。
    • 动作只能是对象。您正在调度函数的返回
    • 对不起,我觉得派送真的很愚蠢。我希望我正在运行的函数也被调度。所以当 setLocation 被调度时, setFilteredFacilities 也应该被调度。 export const setFilteredFacilities = (yourPosition, maxDistance) =&gt; { return { type: FILITER_FACILITIES, payload: { facilitiesInRange: facilitiesInRange } } }
    猜你喜欢
    • 2020-06-13
    • 2018-03-23
    • 1970-01-01
    • 2018-07-08
    • 2017-05-09
    • 2017-11-28
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多