Лучший способ обновить результаты запросов с помощью подписки в Apollo?

#reactjs #apollo-client

#реагирует на #аполлон-клиент

Вопрос:

Существует ли предпочтительный способ обновления результатов запроса с помощью подписки? Насколько я могу видеть, для этого есть два варианта: useSubscription хук с writeQuery методом и subscribeToMore вспомогательный метод.

Вариант № 1:

 const Posts = ({user}) =gt; {  const [addPost] = useMutation(addPostMutation);   const { data } = useQuery(postsQuery);  const posts = data ? data.posts : [];   useSubscription(postAddedSubscription, {  onSubscriptionData: ({client, subscriptionData}) =gt; {  client.writeQuery({  query: postsQuery,  data: {  posts: [...posts, subscriptionData.data.postAdded]  }  });  }  });   return (  lt;section className="section"gt;  lt;div className="container"gt;  lt;h1 className="title"gt;User: {user}lt;/h1gt;  lt;PostList user={user} posts={posts}/gt;  lt;PostInput onSend={addPost}/gt;  lt;/divgt;  lt;/sectiongt;  ); };  

Вариант № 2:

 const Posts = ({user}) =gt; {  const [addPost] = useMutation(addPostMutation);   const { data, subscribeToMore } = useQuery(postsQuery);  const posts = data ? data.posts : [];   useEffect(() =gt; {  let unsubscribe = subscribeToMore({  document: postAddedSubscription,  updateQuery: (prev, { subscriptionData }) =gt; {  if (!subscriptionData.data) return prev;  const newPost = subscriptionData.data.postAdded;   return {  posts: [...prev.posts, newPost],  };  },  });   return () =gt; unsubscribe();  }, []);   return (  lt;section className="section"gt;  lt;div className="container"gt;  lt;h1 className="title"gt;User: {user}lt;/h1gt;  lt;PostList user={user} posts={posts}/gt;  lt;PostInput onSend={addPost}/gt;  lt;/divgt;  lt;/sectiongt;  ); };  

Есть ли какие-либо преимущества у любого из этих методов или их можно использовать в соответствии с предпочтениями?