使用 Redux-Toolkit RTK-Query 进行条件获取

qwe*_*ezz 4 reactjs redux-toolkit rtk-query

我正在尝试从 createAsuncThunks 迁移到 RTK-Query。在页面加载时,我检查存储中是否没有用户,然后从后端获取用户和其他数据。

此代码与 createAsuncThunks 配合良好,但与 RTK-Query 配合使用效果如何?

const InitApp = () => {
  const dispatch = useAppDispatch();
  const user = useAppSelector((state) => state.user);
  const ignore = useRef(false);

  useEffect(() => {
    if (!user && !ignore.current) {
      Promise.all([
        dispatch(getUser()),
         dispatch(getRawMedias()),
        dispatch(getFaces()),
        dispatch(getProjects()),
      ]);
    }

    return () => {
      ignore.current = true;
    };
  }, [dispatch, user]);

  if (!user) {
    return <Loader areaLoader />;
  }

  return <Outlet />;
};
Run Code Online (Sandbox Code Playgroud)

我认为这种方法是错误的,但目前尚不清楚如何正确地实现它:

  const {data} = useGetUserQuery()

  useEffect(() => {
    if (!data) {
      // can't call other hooks here
    }
  }, [data])
Run Code Online (Sandbox Code Playgroud)

ant*_*hio 6

您好,您可以传递skip参数,并将其与 initalState 结合起来,如下所示:

const user = useAppSelector((state) => state.user);
const { data = user } = useUserQuery(undefined, { skip: Boolean(user) });
Run Code Online (Sandbox Code Playgroud)

现在只有在没有用户的情况下才会触发,如果有用户,数据将等于用户