reactjs - 如何在useEffect下使用RTK查询?
问题描述
我有一种情况,我试图在用户登录时获取数据,我的结构是我有两个 redux 切片一个是 userData 另一个是 UserCartData 和
- 当用户登录时,如果登录成功,
- 然后我将数据发送到 UserData ,3,然后我写一个 useEffect 来检查是否有 userData ,
- 然后我将使用 UserData 获取 UserCartData
但问题是我无法在 useEffect 下让 useGetxxxQuery 工作,这是我的代码
const Login = () => {
const user = useAppSelector(state=> state.auth);
const dispatch = useAppDispatch();
const [login] = useLoginMutation();
const [showPassword,setShowPassword] = useState<boolean>(false);
useEffect(() => {
if (user!==null){ //fecth userCart data with userData
const {data ,isLoading,isFetching }= useGetCartByIDQuery(user.user?._id!)
}
}, [dispatch])
return (
<Container>
<Wrapper>
<Title>SIGN IN</Title>
<Formik
initialValues={{ email: "", password: "" }}
validationSchema={Yup.object({
password: Yup.string()
.min(8, 'Must be 8 characters or higher')
.required(),
email: Yup.string().email('Invalid email address').required(),
})}
onSubmit = { async (values, actions) => {
try{
const result = await login(values);
if("data" in result){
//console.log(result.data.data)
dispatch(setCredentials({user:result.data.data.findUser,token:result.data.data.cookie}))
}else{
const err = (result.error as RequestError).data.message
if(err.includes("password")){
actions.setErrors({password:err})
}else if(err.includes("Facebook")){
actions.setErrors({email:err})
}
}
}catch(err){
console.log(err)
}
}}>
//....unrelevant code
解决方案
你不需要在useEffect
这里,你可以简单地使用skipToken
:
import {skipToken} from '@reduxjs/toolkit/query'
const {data, isLoading, isFetching } = useGetCartByIDQuery(user.user ? user.user._id : skipToken)
推荐阅读
- asp.net-core - 基于 body 的 ASP.NET Core 路由
- c# - 如何使用个人访问令牌使用 Libgit2sharp 身份验证
- c++ - 如何解决XAudio2.9虚拟音频设备问题?
- xcode - Xcode 12 Beta 2 - 无法为目标“arm64-apple-ios14.0-simulator”加载标准库
- javascript - 如何使用javascript中的数据表从php获取id
- c++ - 使用原子的线程安全单例
- grafana - Grafana 模板变量查询在不同版本中给出不同的结果(Grafana 5.0 与 Grafana 7.0)
- javascript - 从 Javascript 的选项值获取布尔值的正确方法
- arduino - 使用 Arduino Uno 进行心率、SpO2、温度监测的程序卡住了
- biztalk - 如何在 BizTalk 自定义管道中实现下拉列表