【问题标题】:how to use `useQuery` to trigger api call only when onClick happens?如何仅在 onClick 发生时使用`useQuery`触发api调用?
【发布时间】:2021-09-29 08:00:53
【问题描述】:

如何使用useQuery 仅在 onClick 发生时触发一些 api 调用? 我有一个需要触发 api 调用的应用程序,useAPICall 仅在单击按钮和功能onCheckingData 为真时才带有查询数据。除了在需要触发 api 调用时使用useState 来保存状态。或者有什么更好的方法让我在 useCallBack 中使用useQuery

function useAPICall(data, shouldRunQuery=false) => {
  const query = useQuery(
    [{query: apiGQL, variables: {...data}}],
    async () => {
      const response: {data} = await ucFetch(apiUrl, {
        method: 'POST',
        headers: {'Content-Type': 'application/json'},
        body: JSON.stringify({
          query: apiUrl,
          variables: {...data},
        }),
      });
      return response;
    },
    {enabled: shouldRunQuery}
  );
  return query;
}

function onCheckingData(data){
  //do some logic checkign on data
  // return boolean
  return true
}

export default function App() {
  const [shouldRunQuery, setShouldRunQuery] = useState(false)
  const onClickHandler = useCallBack((data)=>{
    setShouldRunQuery(onCheckingData(data))
  }, [data])

  const {response} = useAPICall(data, shouldRunQuery)
  return (
    <div className="App">
      <button onClick={onClickHandler}>run query</button>
    </div>
  );
}

【问题讨论】:

    标签: javascript typescript react-native react-redux react-hooks


    【解决方案1】:

    这应该可以工作

    const [response, setResponse] = useState({})
    const onClickHandler = useCallBack((data)=>{
      if (onCheckingData(data)) {
        const { response } = useAPICall(data)
        setResponse(response)
      }
    }, [data])
    

    【讨论】:

    • no useAPICall as use useQuery is still under useCallBack
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    相关资源
    最近更新 更多