无法使用 UseCallback 内部的参数访问函数

Unable to acess a Function with parameters inside of UseCallback

我有一个通过 Params 接收 ID 号的页面(屏幕),在这个屏幕中,我尝试从我的 Action(reducer)文件中调用一个 Action Function 并获得一个 API 调用,我想我没有从该调用中获得数组中的任何信息,我相信问题出在调用中,但我在 Action Function 的声明之后放置了一个控制台日志,但它没有打印,所以我认为它没有'无法访问该函数,所以我认为问题在于通过 Dispatch 调用该函数。

我什至尝试在 UseEfect 中放置一个断点,我在其中调用调用 Dispatch 函数的函数,但它永远不会中断我不确定错误在哪里,这是代码:

最后这是我的 Redux Reducer 以防万一:

import { SET_JUGADORES, SET_ESTADISTICA } from "../actions/jugadores";

const initialState = {
    availablePlayers: [],
    estadistica: [],
    playerGoals: [],
    playerCards: [],
    playerGames: [],
}

export default (state = initialState, action) => {
    switch (action.type) {
        case SET_JUGADORES:
            return {
                ...state,
                availablePlayers: action.players,
            };
        case SET_ESTADISTICA:
            return{
                ...state,
                estadistica: estadistica,
                playerGoals: action.goles,
                playerCards: action.tarjetas,
                playerGames: action.juegos
            };
    }
    return state;
};

抱歉格式问题,但给我带来了一些问题;有什么想法是我的问题吗?

谢谢。

您的 screen 代码存在一些问题,因此我建议在添加任何其他内容之前简化逻辑以确保其正常工作。

替换为:

const loadEstad = useCallback (async (param) => {
          setError(null);
          setIsRefreshing(true);
          try {
              await dispatch(userActions.fetchEstadistica(param));
          } catch (err){
              setError(err.message);
          }
          setIsRefreshing(false);
      }, [dispatch, setIsLoading, setError]);

      useEffect(() => {       
          setIsLoading(true); 
          loadEstad(estadId).then(() => {
              setIsLoading(false);
          });
      }, [dispatch, loadEstad]);

      console.log(estadId);
      console.log(goles);

有了这个:

useEffect(()=>{
if (estadId) dispatch(userActions.fetchEstadistica(estadId));
},[estadId]);

假设您的 reducer/action 代码是正确的,那么每次参数 estadId 更改时都应该调用 api。 loading/refresh 应该在减速器中而不是在 screen 组件上设置。

需要牢记的几点:

  1. 不要等待发货。

  2. console.log 在 promise 解析代码块之外的状态变量将不起作用。

  3. 下面这个不行。相反,您应该将加载变量设置为在 API 返回数据后更新的 redux 变量。

    loadEstad(estadId).then(() => { setIsLoading(假); });