代码之家  ›  专栏  ›  技术社区  ›  JV Lobo

执行Apollo变异前映射变量

  •  0
  • JV Lobo  · 技术社区  · 6 年前

    this tutorial 使用Apollo运行React应用程序。

    现在我正在运行一个变异,我已经成功地完成了,但是我正在尝试执行一个更复杂的变异。

    连接 数据集,它必须类似于:

    tags: {
      connect: [{
       id: "cjoo9e0eq004d0824nibmtzl2"
      },
      {
       id: "cjoopece2000a0899n8jsjkr4"
      },
      {
       id: "cjozmqfal00040878t7huvb2s"
      },
      {
       id: "cjozmsquv000l0878y7t2zccm"
      }],
    },
    

    对于这个标记字段,我在前端显示一个select multiselect,因此该值将是一个id数组:[“cjoo9e0eq004d0824nibmtzl2”,“cjoopece2000a089n8jsjkr4”…]。

    这似乎是一个需要解释的棘手问题,我希望解释足够清楚。

    任何帮助都将不胜感激!

    编辑以添加一些代码:

    const CREATE_VIDEO_MUTATION = gql`
      mutation CreateVideoMutation($title: String!, $tags: [TagWhereUniqueInput!]) {
        createVideo(
          data: {
            title: $title, 
            tags: {
              connect: $tags
            }
          }
        ) {
          id
          title
        }
      }
    `
    
    class CreateVideo extends Component {
      state = {
        title: '',
        tags: [],
      }
    
      render() {
        const { title, tags } = this.state;
        return (
            .....
    
          <select multiple 
            className="mb2" 
            value={tags}
            onChange={e => {
              this.setState({ tags: [...e.target.options]
                .filter(({selected}) => selected)
                .map(({value}) => value) })
            }}>
            {tagsToRender.map(tag => {
              return (
                <option key={tag.id} value={tag.id}>
                  {tag.name}
                </option>
              )
            })}
          </select>
    
          <Mutation 
            mutation={CREATE_VIDEO_MUTATION} 
            variables={{ title, tags }}
            onCompleted={() => this.props.history.push('/')}>
            {createVideoMutation => <button onClick={createVideoMutation}>Submit</button>}
          </Mutation>
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Kyle Richardson    6 年前

    下面的例子应该可以做到。

    const _tags = tags.map(tag => ({id}))
    
    <Mutation 
        mutation={CREATE_VIDEO_MUTATION} 
        variables={{ title, tags: _tags }}
        onCompleted={() => this.props.history.push('/')}>
        {createVideoMutation => <button onClick={createVideoMutation}>Submit</button>}
      </Mutation>