apollo graphql mysql_GraphQL 入门: Apollo Client - 简介

韩鸿波
2023-12-01

现在我们已经创建了一个ApolloClient实例并且使用ApolloProvider附加到了UI组件树,我们可以开始使用react-apollo的主要功能: 添加GraphQL功能到我们的UI组件当中.

GraphQL

graphql 容器是用于获取或修改数据推荐的方法. 他是一个高阶组件,用于把Apollo的数据提供给组件.

graphql 的基本使用方法如下:

# 导入需要的组件

import React,{ Component } from 'react';

import PropTypes from 'prop-types'; // React 15.5 只有把React.PropTypes 分离到单独的包中

import { graphql,qql } from 'react-apollo';

// 定义一个普通的React组件

class MyComponent extends Component {

render() {

return

...
;

}

}

// 使用`gql`标签初始化GraphQL查询和数据变更

const MyQuery = gql`

query MyQuery {

todos {

text

}

}

`;

const MyMutation = gql`

mutation MyMutation {

addTodo(text: "Test 123") {

id

}

}`;

// 数据绑定传入MyQuery和MyComponent,返回一个包含数据的React组件

const MyComponentWithData = graphql(MyQuery)(MyComponent);

// 返回一个包含数据更新的React组件

const MyComponentWithMutation = graphql(MyMutation)(MyComponent);

import React,{ Component } from 'react';

import { graphql } from 'react-apollo';

@graphql(MyQuery)

@graphql(MyMutation)

class MyComponent extends Component {

render() {

return

...
;

}

}

graphql 函数接受2个参数:

query: 必须,一个使用gql tag解析的GraphQL文档

config: 可选,一个配置对象,详细的描述如下

该配置对线可以包含一个或多个下面的选项:

name: Rename the prop the higher-order-component passes down to something else

options: Pass options about the query or mutation,documented in the queries and mutations guides

props: 在传递给子组件前修改属性.

withRef: Add a method to access the child component to the container,read more below

shouldResubscribe: A function which gets called with current props and next props when props change. The function should return true if the change requires the component to resubscribe.

graphql 函数返回另一个函数,他接受任何React组件并且返回一个特定查询包裹的新React组件类. 这和Redux中的connect是类似的.

withApollo

withApollo 让 我们把ApolloClient 作为组件的属性直接访问:

import React,{ Component } from 'react';

import { withApollo } from 'react-apollo';

import ApolloClient from 'apollo-client';

# 创建一个普通的React组件

class MyComponent extends Component { ... }

MyComponent.propTypes = {

client: React.PropTypes.instanceOf(ApolloClient).isrequired,}

const MyComponentWithApollo = withApollo(MyComponent);

// or using ES2016 decorators:

@withApollo

class MyComponent extends Component { ... }

然后我们可通过 MyComponent.client 访问 ApolloClient 实例.

withRef

如果需要访问被包裹的组件,可以在选项中使用withRef. 可以通过调用返回组件的getWrappedInstance获取被包裹的实例.

import React,{ Component } from 'react';

import { graphql } from 'react-apollo';

# 一个普通的React组件

class MyComponent extends Component { ... }

# 通过graphql函数返回的组件

const MyComponentWithUpvote = graphql(Upvote,{

withRef: true,})(MyComponent);

// 调用返回组件的getWrappedInstance方法可得到MyComponent

// MyComponentWithUpvote.getWrappedInstance() returns MyComponent instance

compose

react-apollo 导出了一个compose函数. 用于减少书写代码的量.

import { graphql,compose } from 'react-apollo';

import { connect } from 'react-redux';

export default compose(

graphql(query,queryOptions),graphql(mutation,mutationOptions),connect(mapStateToProps,mapDispatchToProps)

)(Component);

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

 类似资料: