在useEffect中使用useDispatch进行数据获取(代码有效,但有错误)

时间:2020-05-19 19:44:22

标签: reactjs react-redux use-effect

我尝试使用useEffect通过useDispatch挂钩从API提取数据:

  const dispatch = useDispatch();

  useEffect(() => {dispatch(actions.fetchSearch(submitValue))}, [submitValue, dispatch]);

其中 submitValue -是搜索查询的输入值。 fetchSearch()看起来像这样:

export const fetchSearch = (query) => {
return dispatch => {
    const queryParams = 'http://190.75.199.65/api/products?count=20&sort_by=numberOfEntries&sort_order=DESC&page=1&search='+query;
    axios.get(queryParams)
    .then( res=> {
            dispatch(fetchSearchSuccess(res.data));
        }
    )
};

};

我可以通过此代码获取数据,但始终出现错误:

除了函数之外,效果函数不能返回其他任何东西 用于清理。

好像您写了useEffect(async()=> ...)或返回了 诺言。而是在您的效果中编写异步函数并调用 立即

我试图在useEffect内创建异步函数,但错误相同,或者我做错了。

2 个答案:

答案 0 :(得分:0)

尝试这样做:

const dispatch = useDispatch();

useEffect(() => {
    (async () => {
     await dispatch(actions.fetchSearch(submitValue));
    })();
}, [submitValue, dispatch]);

我认为这是因为您直接调用了异步函数,并且在useEffect中返回了promise。

答案 1 :(得分:0)

代码工作无任何变化

const dispatch = useDispatch();

useEffect(() => {dispatch(actions.fetchSearch(submitValue))}, [submitValue, dispatch]);

只是忘了删除旧的useEffect。