首页 > 解决方案 > 如何使用两个用useEffect更新相同状态的函数?

问题描述

我试图制作一个对 api 进行两次查询的钩子,然后将结果保存为如下状态:

   const useQueryApiInfo = ():UseQueryType=>{
    const [state, setState] = useState<stateType>({data:null, error:null, loading:false})
    const CURRENT_LOGGED_IN_USER_NAME = getLoggedInUserName();
    
    // for getApiIdeaInfo query
    const GetApiIdeaInfo:GetApiIdeaInfoType =async(authState, id, CURRENT_LOGGED_IN_USER_NAME)=>{
        const res = await getApiIdeaInfo(authState, id, CURRENT_LOGGED_IN_USER_NAME)
        if (res.errors) { setState({ ...state, error: res.errors, loading: false, data: null }) }
        if (!res.data) return;
        setState({ data:{...state.data?.resFromFetchProposal,resFromApiInfo:res.data.getApiIdeaFullInfo}, error:null, loading:false})
        console.log(state,"from getIdea")
    }
    
    // for fetchProposal mutation
    
    const FetchProposalsForIdea =async(id:string)=>{
        const res = await fetchProposalsForIdea(id)
        if (res.errors) { setState({ ...state, error: res.errors, loading: false, data: null }) }
        if (!res.data) return;
        setState({  data:{...state.data?.resFromApiInfo, resFromFetchProposal:res.data?.fetchProposalsForAnIdea}, error:null, loading:false})
        
    }
    return [state, {GetApiIdeaInfo, FetchProposalsForIdea, ReactOnApiIdea}]

}

我在 useEffect 中调用此函数,如下所示:

 useEffect(()=>{
        updateApiInfo.GetApiIdeaInfo(CURRENT_AUTH_STATE,productId,CURRENT_LOGGED_IN_USER_NAME)
         updateApiInfo.FetchProposalsForIdea(productId)
    },[])

但问题是它只更新最后一个状态。它没有给出两个查询的结果。我在这里做错了什么?

标签: reactjsapiuse-effectuse-state

解决方案


setState((prevState) => {  
   return {
     ...prevState,
     data: {
       ...prevState.data,
       resFromFetchProposal: res.data?.fetchProposalsForAnIdea
     },
     error:null, loading:false
   }
})

setState((prevState) => {  
   return {
     ...prevState,
     data: {
       ...prevState.data,
       resFromApiInfo: res.data?.getApiIdeaFullInfo
     },
     error:null, loading:false
   }
})


推荐阅读