In this lesson I refactor some code that utilizes the Mutation component to update client-side cache to use the new ApolloConsumer component baked into react-apollo 2.1.

Additional Resources: https://dev-blog.apollodata.com/introducing-react-apollo-2-1-c837cc23d926

If just working on local state, we can use ApolloConsumer:

import React from "react";
import { render } from "react-dom"; import ApolloClient, { gql } from "apollo-boost";
import {
ApolloProvider,
Query,
Mutation,
compose,
graphql,
ApolloConsumer
} from "react-apollo"; const defaults = {
items: ["Apple", "Orange"]
}; const GET_ITEMS = gql`
query {
items @client
}
`; const client = new ApolloClient({
clientState: {
defaults
}
}); const Items = () => (
<Query query={GET_ITEMS}>
{({ loading, error, data }) => {
if (loading) return <p>Loading...</p>;
if (error) return <p>Error :(</p>; return data.items.map(item => <div key={item}>{item}</div>);
}}
</Query>
); const AddItem = ({ addItem }) => {
let input;
return (
<ApolloConsumer>
{cache => (
<div>
<form
onSubmit={e => {
e.preventDefault();
let { items } = cache.readQuery({ query: GET_ITEMS });
items = [...items, input.value];
cache.writeData({ data: { items } });
input.value = "";
input.focus();
}}
>
<input ref={node => (input = node)} />
<button type="submit">Add Item</button>
</form>
</div>
)}
</ApolloConsumer>
);
}; const App = () => (
<div>
<div>
<Items />
<AddItem />
</div>
</div>
); const ApolloApp = () => (
<ApolloProvider client={client}>
<App />
</ApolloProvider>
); render(<ApolloApp />, document.getElementById("root"));

最新文章

  1. 解读发布:.NET Core RC2 and .NET Core SDK Preview 1
  2. [LeetCode] Shortest Word Distance 最短单词距离
  3. 记录一下dotnetcore.1.0.0-VS2015Tools.preview2安装不上的问题
  4. 使用 Velocity 模板引擎快速生成代码
  5. HDU 3966(树链剖分+点修改+点查询)
  6. suse linux修改hostname
  7. sqool导出oracle数据
  8. JellyViewPager
  9. linq 跨库查询
  10. soj 1698 Hungry Cow_三角函数
  11. shell程序设计(转)
  12. CentOS查看端口是否被占用
  13. window下mySql数据库设置密码
  14. 词根:lun = moon, 表示“月亮”
  15. laravel5.4+vue+element简单搭建(gulp+laravel Elixir)(转)
  16. 类文件结构-----Class类文件的结构
  17. canvas版《俄罗斯方块》
  18. redhat yum替换成CentOS yum 并修改源
  19. NOPI 导出 Excel 2007
  20. oracle,mysql分页

热门文章

  1. Java数据库编程及Java XML解析技术
  2. bzoj3436: 小K的农场(差分约束)
  3. bzoj 1468 Tree(点分治模板)
  4. Docker 常用命令和命令集结
  5. 2015 多校赛 第二场 1006 (hdu 5305)
  6. xcode制作越狱后ipa安装文件
  7. C#之考勤系统
  8. Spring Boot (4) 静态页面和Thymeleaf模板
  9. JQuery 一些特殊符号的使用
  10. android.system.ErrnoException: open failed: ENOENT (No such file or directory) 07-19 20:27:45.011 66