score:27

Accepted answer

What you need to do is to update the state when the first hook results in a response. To do that you can make use of useEffect hook. You need to render all hooks at the top of your functional component.

const [url, setUrl] = useState('')

const updateLink = useMutation(LINK_UPDATE_MUTATION, {
  variables: {
    id: props.id,
    url
  }
})

const { data, loading, error } = useQuery(LINK_QUERY, {
  variables: {
    id: props.id
  }
})

useEffect(() => {
  if(data && data.link) {
    setUrl(data.link.url);
  }
}, [data])

if (loading) {
  return <div>Loading...</div>
}
if (error) {
  return <div>Error! {error.message}</div>
}

score:-2

You can simply follow this apprch, I also did by this way.

  const client = useApolloClient();
  const [newData, setNewData] = useState(null);
  const [loading, setLoading] = useState(false);

  async function runQuery() {
    setLoading(true);

    const useQueryData = await client.query({
      query: SUBMITTED_ASSIGNMENTS, variables: {
        userId
      }
    });
    setNewData(useQueryData?.data?.assignments);
    console.log('newData', newData);
    setLoading(false);
  }

  useEffect(() => {
    runQuery();
  }, [newData]);

Related Query

More Query from same tag