首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >把客户端的数据添加到阿波罗?

把客户端的数据添加到阿波罗?
EN

Stack Overflow用户
提问于 2018-01-19 15:06:47
回答 1查看 579关注 0票数 8

我试着用反应把我的头绕在阿波罗身边。我怎样才能给我当地的阿波罗商店添加状态呢?

我在用流星。它在客户端提供一个函数来测试用户是否登录,如果他们使用Meteor.userId()返回他们的id。我需要在许多不同的组件中访问这个状态。

这是我的客户文件:

代码语言:javascript
复制
import React from 'react';
import { Meteor } from 'meteor/meteor';
import { render } from 'react-dom';
import { ApolloProvider } from 'react-apollo';
import { ApolloLink, from } from 'apollo-link';
import { ApolloClient } from 'apollo-client';
import { HttpLink } from 'apollo-link-http';
import { InMemoryCache } from 'apollo-cache-inmemory';

import App from '../../../imports/ui/App/App';

const httpLink = new HttpLink({
    uri: Meteor.absoluteUrl('graphql'),
});

const authLink = new ApolloLink((operation, forward) => {
    const token = Accounts._storedLoginToken();
    operation.setContext(() => ({
        headers: {
            'meteor-login-token': token,
        },
    }));
    return forward(operation);
});

const cache = new InMemoryCache();

const client = new ApolloClient({
    link: from([authLink, httpLink]),
    cache,
});

const ApolloApp = () => (
    <ApolloProvider client={client}>
        <App />
    </ApolloProvider>
);

Meteor.startup(() => {
    render(<ApolloApp />, document.getElementById('app'));
});

注册API(服务器):

代码语言:javascript
复制
import { createApolloServer } from 'meteor/apollo';
import { makeExecutableSchema } from 'graphql-tools';
import merge from 'lodash/merge';

import GroupsSchema from '../../api/groups/Groups.graphql';
import GroupsResolvers from '../../api/groups/resolvers';

import UsersSchema from '../../api/users/Users.graphql';
import UsersResolvers from '../../api/users/resolvers';

// Comment find

const typeDefs = [GroupsSchema, UsersSchema];
const resolvers = merge(GroupsResolvers);

const schema = makeExecutableSchema({
    typeDefs,
    resolvers,
});

createApolloServer({ schema });
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-24 22:23:18

--首先,这里的是关于如何从缓存中读取的文档中最简单的示例:

代码语言:javascript
复制
client.query({ query: gql`{ hello }` }).then(console.log);

在这里阅读更多相关信息:阿波罗客户-基本操作

下面是如何将直接写入缓存的说明:阿波罗客户- writeQuery和writeFragment

第二, --这些都适合于多个场景。但是,您可能真正想要的是,将您的组件封装为临时的,它将执行从缓存读取的查询,并将结果放在组件的props上。使用阿波罗客户端提供的功能非常简单。

您可以在这里找到一个很好的解释和示例:阿波罗客户端-询问Basics

对于只从本地缓存读取的查询,请在此处使用FetchPolicy: 'cache-only' read:阿波罗客户端查询- options.fetchPolicy

第三,适用于许多场景,就像您提到的那样,以上两种情况应该足够了。如果您需要更多的控制来管理您的本地状态,那么就会有新的apollo-link-state

使用它,您可以在客户机上编写自定义解析器,这些解析器将直接处理本地缓存,而不会到达服务器。它让我们执行复杂的操作,这些操作在服务器上部分解析,部分由客户端解析。

在这里阅读更多相关信息:阿波罗链接-与阿波罗客户端一起管理本地数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48344020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档