useLazyQuery causing too many re-renders [Apollo/ apollo/react hooks]

后端 未结 3 1799
忘掉有多难
忘掉有多难 2021-01-21 14:01

I\'m building a discord/slack clone. I have Channels, Messages and users. As soon as my Chat component loads, channels get fetched with useQuery hook from Apollo.<

相关标签:
3条回答
  • 2021-01-21 14:26

    You could use the called variable return by useLazyQuery.

    !called && fetchMessages({ variables: { channelid: channelidData.channelid } });

    0 讨论(0)
  • 2021-01-21 14:27

    You call fetchMessages on every render. Try to put fetchMessages in a useEffect :

    useEffect(() => {
        if (!channelidLoading && channelidData) {
            fetchMessages();
        }
    
    }, [channelidLoading, channelidData]);
    

    Like that the fetchMessages function only calls when channelidLoading or channelidData is changing.

    0 讨论(0)
  • 2021-01-21 14:46

    You could also look at doing the following:

       import debounce from 'lodash.debounce';
       ...
    
       const [fetchMessages, { data, called, loading, error }] = useLazyQuery(
        FETCH_MESSAGES
      );
      const findMessageButChill = debounce(fetchMessages, 350);
      ...
      } else if (!channelidLoading && channelidData) {
        findMessageButChill({
           variables: { channelid: channelidData.channelid },
        });
      }
    
    
    
    0 讨论(0)
提交回复
热议问题