代码之家  ›  专栏  ›  技术社区  ›  njho

用Apollo客户机GraphQL查询和修改表单

  •  0
  • njho  · 技术社区  · 7 年前

    1. 用户单击具有UID的行项目

    2. 我们打开一个窗体来编辑此数据(预先填充了以前保存的信息)

    3. 然后编辑这些数据并保存

    我想(2)安培(3) 会被 <Query><Mutation/><Query> 但它不起作用,主要是因为在查询中设置状态会使textinputs控制输入。。。控制者 <Query> ,我不能再编辑它了。

    除此之外,我读到GraphQL不再需要Redux,等等?所以我不愿意把这个查询放在一个中间件中并传播给Redux。

    1 回复  |  直到 7 年前
        1
  •  4
  •   Daniel Rearden    7 年前

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

    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>
    

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