使用 Apollo Client GraphQL 查询和修改表单

Posted

技术标签:

【中文标题】使用 Apollo Client GraphQL 查询和修改表单【英文标题】:Querying and Mutating a Form with Apollo Client GraphQL 【发布时间】:2019-03-13 20:15:13 【问题描述】:

整个 GraphQL 范式对我来说是新的,通常使用 React Redux。我的要求是:

    用户单击带有 UID 的行项目

    我们打开一个表单来编辑这些数据(预先填充了之前保存的信息)

    然后我们编辑这些数据并保存

我认为 (2) 和 (3) 将由 <Query><Mutation/><Query> 类型的结构处理,但它不起作用,主要是因为在查询中设置状态将使 textinputs 受控输入...由 @ 控制987654322@,我不能再编辑了。

除此之外,我听说 GraphQL 消除了对 Redux 等的需求?所以我不愿意把这个查询放在中间件中并传播到 Redux。

有什么想法吗?这必须是一个共同的要求。其他人有什么想法?

【问题讨论】:

【参考方案1】:

您的数据应该作为道具传递给实际呈现表单的任何组件。在该组件的构造函数中,然后根据道具设置初始状态。一个粗略的例子:

class FormComponent extends React.Component 
  constructor () 
    this.state = this.props.initialState
  

  render () 
    // Render form using this.state and this.props.update
  


<Mutation mutation=SOME_MUTATION>
  (mutate) => (
    <Query query=SOME_QUERY/>
      ( data, loading, error ) => 
        if (loading) return <LoadingIndicator/>
        if (error) return <ErrorComponent/>
        if (data) return <FormComponent initialValues=data.someQuery update=mutate/>
      
    </Query>
  )
</Mutation>

突变可以进入 Query 内部,也可以进入 FormComponent 本身——那一点并不重要。在获得数据之前,我们不会渲染 FormComponent,因此初始值将始终反映查询的结果。

【讨论】:

以上是关于使用 Apollo Client GraphQL 查询和修改表单的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Apollo GraphQL 的查询中使用 @client @export 变量

技术博客 | 使用 Apollo Client 快速构建一个支持 GraphQL 的 React App

使用 Apollo Client GraphQL 查询和修改表单

无法使用 Apollo Client 和 GraphQL .NET 将值转换为 AST

使用 Apollo Client 为 React 组件动态设置 GraphQL 查询

为啥 apollo-client 的 GraphQL 查询不出现在 Chrome 的 XHR 网络过滤器中?