在 `redux-saga` 中使用`@apollo/client``ApolloClient.subscribe`

问题描述 投票:0回答:1

我想使用

redux-saga
来管理应用程序状态中的事件驱动的变化,同时使用
@apollo/client
来订阅 GraphQL 服务器上的变化。

  • 是否有关于如何/可以做到这一点的最佳实践?
  • 我这样做是在滥用
    redux-saga
    还是
    @apollo/client

我期望它如何运作的想法如下:

function* rootSaga () {
   yield fork(watchAccountBalance)
}

function* watchAccountBalance () {
   // @todo Create a subscription
   // @todo Every change on the subscription is passed as `balance`
   if (balance == 0.00) {
      yield put(notifyBalanceEmpty());
   }
}

如果不具备这样做的能力,它将导致(已经很健壮的)代码库有许多反应挂钩,当

redux-saga
响应发生变化时,它们会向
useSubscription
发送操作。

简单的实现具有通过查询调用

apolloClient.subscribe
产生的订阅响应。

function* subscribeAccountBalance() {
  const apolloClient: ApolloClient<NormalizedCacheObject> = yield call(getClient);
  const subscription = yield call([apolloClient, apolloClient.subscribe], {
    query: USER_BALANCE_SUBSCRIPTION,
  });
  console.log(TAG, 'subscription', {subscription});
}

subscription
的值为:
LOG  home/saga subscription {"subscription": {"_subscriber": [Function anonymous]}}

redux apollo apollo-client redux-saga
1个回答
0
投票

老实说,这似乎有点奇怪。 Apollo Client 的目的已经是为您管理您的状态——在大多数情况下,您不应该在其之上添加 Redux。 (我是说,从既是 Apollo 客户端又是 Redux 维护者的独特地位出发。)

您的数据可能应该保留在一个系统中。如果您不使用 Apollo Client 的缓存功能,那么较低级别的库很可能就足够了。或者你在那个时候跳过 Redux,让大部分由 Apollo 处理。

© www.soinside.com 2019 - 2024. All rights reserved.