[React] Update Application State with React Apollo ApolloConsumer Component
2024-08-31 04:53:29
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"));
最新文章
- 解读发布:.NET Core RC2 and .NET Core SDK Preview 1
- [LeetCode] Shortest Word Distance 最短单词距离
- 记录一下dotnetcore.1.0.0-VS2015Tools.preview2安装不上的问题
- 使用 Velocity 模板引擎快速生成代码
- HDU 3966(树链剖分+点修改+点查询)
- suse linux修改hostname
- sqool导出oracle数据
- JellyViewPager
- linq 跨库查询
- soj 1698 Hungry Cow_三角函数
- shell程序设计(转)
- CentOS查看端口是否被占用
- window下mySql数据库设置密码
- 词根:lun = moon, 表示“月亮”
- laravel5.4+vue+element简单搭建(gulp+laravel Elixir)(转)
- 类文件结构-----Class类文件的结构
- canvas版《俄罗斯方块》
- redhat yum替换成CentOS yum 并修改源
- NOPI 导出 Excel 2007
- oracle,mysql分页
热门文章
- Java数据库编程及Java XML解析技术
- bzoj3436: 小K的农场(差分约束)
- bzoj 1468 Tree(点分治模板)
- Docker 常用命令和命令集结
- 2015 多校赛 第二场 1006 (hdu 5305)
- xcode制作越狱后ipa安装文件
- C#之考勤系统
- Spring Boot (4) 静态页面和Thymeleaf模板
- JQuery 一些特殊符号的使用
- android.system.ErrnoException: open failed: ENOENT (No such file or directory) 07-19 20:27:45.011 66