将 mutate() 从 ApolloClient 移动到 React 组件的正确方法?

Posted

技术标签:

【中文标题】将 mutate() 从 ApolloClient 移动到 React 组件的正确方法?【英文标题】:Correct Way to Move Mutate() from ApolloClient to React Component? 【发布时间】:2017-11-28 03:32:38 【问题描述】:

根据Apollo Docs,我想从 ApolloClient 获取 mutate() 函数到属于我的反应组件的道具中。这是正确/首选的方法吗?

class myComponent extends React.Component 
    constructor(props) 
        super(props);
        this.mutate = props.client.mutate();
    ;

【问题讨论】:

【参考方案1】:

如果您想使用 apollo 客户端动态调用突变,则可以像这样使用它:

import  withApollo  from 'react-apollo';

class myComponent extends React.Component 
  constructor(props) 
    super(props);
    this.mutate = props.client.mutate;
  

  onClick = () => 
    this.mutate(
      mutation: gql `$<define your graphql mutation>`,
      variables:  ... ,
    ).then(...);
  
  
  ...


export default withApollo(MyComponent);

否则,我建议您使用 graphql 静态定义您的突变,然后调用突变:

class MyComponent extends React.Component 
  onClick = () => 
    this.props.mutate( variables:  ...  ).then(....);
  

  ...



const yourGraphqlMutation = gql `$<define your graphql mutation>`;

export default graphql(yourGraphqlMutation)(MyComponent);

【讨论】:

以上是关于将 mutate() 从 ApolloClient 移动到 React 组件的正确方法?的主要内容,如果未能解决你的问题,请参考以下文章

Apollo 客户端:mutate 不是函数

ApolloParseException : 无法解析 http 响应

禁用从 apollo-boost 导出的 ApolloClient 中的缓存

从函数中指定 mutate() 中使用的新变量的名称

ReferenceError:从“apollo-boost”导入 ApolloClient 时未定义要求

通过 react(ApolloClient.query()) 方法从 GraphQL 服务器获取数据