首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >传递输入值到我的graphql突变- react/react-apollo

传递输入值到我的graphql突变- react/react-apollo
EN

Stack Overflow用户
提问于 2018-02-06 06:34:40
回答 1查看 991关注 0票数 0

我正在结合使用react-apolloreact-native-gifted-chat

我尝试从用户获取输入,并将其传递给我的this.props.addMessageToTeam方法。

将输入值传递给我的graphql变体时遇到了困难。下面是graphql突变部分的外观:

代码语言:javascript
复制
const addMessageToTeam = gql`
  mutation {
    createMessage(
    message: $message,
    teamId: "21345667"
  ) {
      id
      message
    }
  }
`;

请看下面的完整代码:

代码语言:javascript
复制
import React, { Component } from 'react';
import { View } from 'react-native';
import { GiftedChat, Bubble } from 'react-native-gifted-chat';
import styled from 'styled-components/native';
import gql from 'graphql-tag';
import { graphql, compose } from 'react-apollo';

class Chat extends Component {

  state = {
    message: '',
    messages: [],
  }

  updateText = (e) => {
    this.setState({
       message: e
    });
   }

  renderBubble (props) {
    return (
        <Bubble {...props} />
    );
  }

  sendMessage = (e) => {
    this.props.addMessageToTeam(e[0].text);
  }

  render() {

    let allMessages = this.props.data.allMessages || [];

    allMessages = allMessages.map(msg => {
      return {
        _id: msg.id,
        text: msg.message,
        createdAt: new Date(),
        user: {
          _id: 2,
          name: 'React Native',
          avatar: 'https://facebook.github.io/react/img/logo_og.png',
        }
      }
    });

    return (
      <MainContainer>
        <GiftedChat
           messages={ allMessages }
           renderBubble={this.renderBubble}
           onInputTextChanged={this.updateText}
           onSend={this.sendMessage}
          user={{ _id: 12345 }}
        />
       </MainContainer>
    );
  }
}

const MainContainer = styled.View`
    display: flex;
    flex: 1;
`

const getAllMessages = gql`
  query {
    allMessages {
      id
      message
    }
  }
`;

const addMessageToTeam = gql`
  mutation {
    createMessage(
    message: $message,
    teamId: "21345667"
  ) {
      id
      message
    }
  }
`;

export default compose(
  graphql(getAllMessages),
  graphql(addMessageToTeam, { name: 'addMessageToTeam' }),
)(Chat);

如果需要任何进一步的信息,请让我知道。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-06 08:20:03

在您展示的场景中,应该使用遵循以下结构的对象来调用突变:

代码语言:javascript
复制
sendMessage = (e) => {
  this.props.addMessageToTeam({
    variables: {
      message: e[0].text,
    }
  });
}

这是因为graphql突变是用一个名为$message的变量定义的

您还应该将graphql声明更改为:

代码语言:javascript
复制
mutation CreateMessage($message: String) {
  createMessage(message: $message, teamId: "21345667")
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48632590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档