apollo-link-state 以及如何访问本地状态/缓存



也许我只是没有得到apollo-link-state的作用,但我想如果我有一个"默认"值,它会通过提供者出现在我的道具中。然而,我找不到它。如何访问"缓存"或本地状态?

我有:

import { ApolloClient, createNetworkInterface } from 'react-apollo';
import { InMemoryCache } from 'apollo-cache-inmemory';
import { withClientState } from 'apollo-link-state';
import dataIdFromObject from './dataIdFromObject';
const defaults = {
  NAME: 'Biff'
};
const resolvers = {};
const cache = new InMemoryCache();
const stateLink = withClientState({ cache, resolvers, defaults });
const apolloClient = new ApolloClient({
  cache,
  link: stateLink,
  networkInterface: createNetworkInterface({
    uri: `${config.url}/graphql`,
    opts: {
      credentials: 'include'
    }
  }),
  addTypename: true,
  dataIdFromObject
});

我正在为我的解析器传递一个空对象,因为复制后端中的所有化简器绝对没有意义。我想我会在道具中看到"名字:Biff"。不。

该商店是我的"redux"商店,不是这个问题的一部分。我想有了那个"客户端"道具,我会看到我的默认值。不。

  <ApolloProvider store={this.props.store} client={apolloClient}>

当我在子组件中记录我的道具时,任何地方都没有缓存或"名称:Biff"的迹象。如何在我的子组件中获取此本地状态。如果我使用突变更新它,我应该看到我的组件重新渲染并可以访问新更新的本地状态......但。。它在哪里?

如文档中所述,您可以像查询远程服务器一样查询本地状态,只是您附加了一个@client指令,让 Apollo 知道您正在通过 apollo-link-state 请求某些内容。所以我们需要一个 GraphQL 查询,用一个graphql-tag模板文字标签包装:

const GET_NAME = gql`
  query {
    NAME @client
  }
`

我们像使用任何其他查询一样使用它:

<Query query={GET_NAME}>
  {({ loading, error, data }) => {
    // render appropriate component depending on loading/error state
  }}
</Query>

虽然 Apollo 公开了用于读取和写入缓存的方法,但这些方法应仅用于为本地状态创建突变的上下文。查询缓存应通过Query组件完成,实际更改缓存应通过Mutation组件完成。您可以在文档中阅读有关编写自己的突变的更多信息。

相关内容

  • 没有找到相关文章

最新更新