当前位置: 首页 > 知识库问答 >
问题:

如何从graphql()创建的高阶组件中获取MutationResult

都超英
2023-03-14

React Apollo Mutations允许我创建一个组件,该组件采用MutationResult作为道具:https://www.apollographql.com/docs/react/api/react-apollo.html#mutation-render-prop

现在,如果我要使用由graphql()创建的高阶组件

function MyComponent({ mutate }) {
  return (
    <button onClick={() => {
      mutate({
        variables: { foo: 42 },
      });
    }}>
      Mutate
    </button>
  );
}

export default graphql(gql`mutation { ... }`)(MyComponent);

我的组件将只有使变作为道具。如何将{data, load, error}获取到组件中?

共有2个答案

路阳华
2023-03-14

@allenylju

您实际上可以在文档中阅读它。它说突变返回一个Promise。因此,您可以使用. then从突变中获取结果,或者使用. catch以防出现错误。在加载的情况下,您可以使用组件状态来执行此操作,在突变之前调用setState({load: true}),在它之后调用setState({load: false})。希望有帮助!

羊舌承
2023-03-14

变异是一种promise,因此您可以接收then中的值,并根据需要返回它们。如果您有async和await,那么可以返回数据并使用await,这样您就可以以同步样式的代码访问它。

function MyComponent({ mutate, setState }) {
  return (
    <button onClick={() => 
      mutate({
        variables: { foo: 42 },
      }).then(data => {
        // Process your data as needed here:
        setState({ data });
      }).catch(err => console.error('Our Error: ', err);
    }>
      Mutate
    </button>
  );
}

export default graphql(gql`mutation { ... }`)(MyComponent);
 类似资料:
  • 本文向大家介绍React.js中的高阶组件,包括了React.js中的高阶组件的使用技巧和注意事项,需要的朋友参考一下 高阶部分简称为hoc。这是一种接收组件并返回具有附加功能的新组件的模式。 // hoc是自定义JavaScript函数的名称 我们使用带有状态和/或道具的组件来构建UI。hoc用类似的方法从提供的组件中构建一个新组件。 使用hoc在React中成为一个横切关注点。这些组件将负责单

  • Examples Using the `withRouter` utility 如果你想应用里每个组件都处理路由对象,你可以使用withRouter高阶组件。下面是如何使用它: import { withRouter } from 'next/router' const ActiveLink = ({ children, router, href }) => { const style =

  • 我有一个UserControl,其中有两个文本框。用户可以根据需要添加这些UserControls的多个副本。每个UserControl都添加到面板的底部。如何从这些用户控件中获取信息。 这是添加我当前使用的UserControl的代码: 以从文本框中获取数据,但MailingReference.Controls不存在。 我不确定如何遍历每个MailingReference UserControl

  • 在React中,高阶组件是重用组件逻辑的一项高级技术。高阶组件并不是React API的一部分。高阶组件源自于React生态。 具体来说,高阶组件是一个函数,能够接受一个组件并返回一个新的组件。 const EnhancedComponent = higherOrderComponent(WrappedComponent); 组件是将props转化成UI,然而高阶组件将一个组价转化成另外一个组件

  • 我有一个要导入页面的组件: 在页面上,我呈现组件