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

似乎它忽略了apollo graph ql中的更新突变?

惠翰藻
2023-03-14

我有一个Apollo Graphql客户端项目。我尝试在查询中使用变异。但它似乎忽略了更新突变,因为查看效果很好。请帮助澄清问题。

我在改变编码方式方面做了很多尝试。在compose中交换变异和查询。更改更新文档的方式。但无法得到它。

我的代码如下:

import React, { Component } from 'react';
//import { withRouter } from 'react-router-dom';
import { graphql, compose } from 'react-apollo';
import { FormGroup, ControlLabel, Row, Col, Button } from 'react-bootstrap';
import { updateCustomer } from './graphql';
import { customerView } from './graphql';
import { customersList } from './graphql';
import validate from '../modules/validate';
//import Loading from '../components/Loading';
//import NotFound from './NotFound';

class EditCustomer extends Component {
    componentDidMount() {
        const component = this;
        validate(component.form, {
      rules: {
        firstname: {
          required: true,
        },
      },
      messages: {
        firstname: {
          required: 'please enter name',
        },
      },
        submitHandler() { component.handleSubmit(component.form); },
        });
    }

  handleSubmit(form) {
    const { mutate, history, match } = this.props;

    mutate({ 
      variables: {
        _id: match.params._customerid,
        salution: form.salution.value.trim(),
        firstname: form.firstname.value.trim(),
        lastname: form.lastname.value.trim(),
        nickname: form.nickname.value.trim(),
                email: form.email.value.trim(),
                phone: form.phone.value.trim(),
                mobile: form.mobile.value.trim(),
                createdAt: new Date(),
                updatedAt: new Date(),
      },
        updateCustomer: {
            _id: match.params._customerid,
        salution: form.salution.value.trim(),
        firstname: form.firstname.value.trim(),
        lastname: form.lastname.value.trim(),
        nickname: form.nickname.value.trim(),
                email: form.email.value.trim(),
                phone: form.phone.value.trim(),
                mobile: form.mobile.value.trim(),
                createdAt: new Date(),
                updatedAt: new Date(),
      },
      update: (store, { data: { updateCustomer } }) => {
        const data = store.readQuery({ query: customersList });
        //data.CustomersList.push(updateCustomer); // This push to the page. Encountered two children with the same key
        store.writeQuery({ query: customersList, data });
      },
    });
    this.form.reset();
    history.push(`/customers`);
  }

    render() {
        const { data: { loading, customerView }} = this.props;

  return ( !loading ? (
    <div className="EditCustomer">
        <Row>
            <Col xs={8} sm={4} md={3} lg={2}>
            <form ref={form => (this.form = form)} onSubmit={event => event.preventDefault()}>
                <FormGroup>
                <ControlLabel>Salution</ControlLabel>
                <input
                type="text"
                name="salution"     
                defaultValue={customerView && customerView.salution}
                autoFocus
                />
                </FormGroup>
                <FormGroup>
                <ControlLabel>Firstname</ControlLabel>
                <input
                type="text"
                name="firstname"
                defaultValue={customerView && customerView.firstname}
                />
                </FormGroup>
                <FormGroup>
                <ControlLabel>Lastname</ControlLabel>
                <input
                type="text"
                name="lastname"
                defaultValue={customerView && customerView.lastname}
                />
                </FormGroup>
                <FormGroup>
                <ControlLabel>Nickname</ControlLabel>
                <input
                type="text"
                name="nickname"
                defaultValue={customerView && customerView.nickname}
              />
              </FormGroup>
                <FormGroup>
                <ControlLabel>Email</ControlLabel>
                <input
                type="text"
                name="email"
                defaultValue={customerView && customerView.email}   
              />
              </FormGroup>
                <FormGroup>
                <ControlLabel>Phone</ControlLabel>
                <input
                type="text"
                name="phone"
                defaultValue={customerView && customerView.phone}
              />
              </FormGroup>
                <FormGroup>
                <ControlLabel>Mobile</ControlLabel>
                <input
                type="text"
                name="mobile"
                defaultValue={customerView && customerView.mobile}
              />
              </FormGroup>
                <br />
                <br />
                <Button type="submit" bsStyle="success">
        Edit
        </Button>
        <br />
        </form>
            </Col>
      </Row>
        </div>
    ) : <div>Loding...</div> );
  }
}


const UpdateCustomerMutation = compose(
    graphql(updateCustomer, { name: 'updateCustomer' }),
    graphql(customerView, {
        options: (props) => ({
            variables: { _id: props.match.params._customerid },
        })
    }),

)(EditCustomer);

export default UpdateCustomerMutation;

共有1个答案

越飞语
2023-03-14

您使用的是可变道具,而没有在选项中提供name。尝试使用以下方法之一

mutate({
  name: "updateCustomer"
  variables: {
    ...
  },
}

const { updateCustomer } = this.props
updateCustomer({
  variables: {
    ...
  },
})
 类似资料:
  • 我在配置Spring MessageSource以忽略我的系统区域设置时遇到问题。当我使用null locale参数调用getMessage时,我希望我的MessageSource选择默认属性文件messages.properties.相反,它选择messages_en.properties.当我将此属性文件的名称更改为messages_fr.properties然后选择默认属性文件。我的系统区域

  • 我已经为这个问题挣扎了几天了,希望有人能帮上忙。 当我的应用程序尝试构建Hibernate3 SessionFactory时,我遇到以下错误: 下面是我的/WEB-INF/jboss网站。xml: Hibernate在我的单元测试中运行良好,只有当我将其部署到测试服务器时才会发生这种情况。 从我发现的情况来看,这似乎是因为jboss已经有了dom4j的副本。 不,我无法从我的项目中删除dom4j,

  • 我们在java ee应用程序中使用Log4j2。我们使用一个库,其中日志是根据SLF4J编程的。在这个库中有一个类,它记录了很多我不想要的东西- 我的日志4J2。xml如下所示: 但是,BaseSerializingTranscoder仍然记录错误。如果我做一个简单的测试,并将BaseSerializingTranscoder中找到的日志代码放在测试函数中,我会看到记录器是通过org检索的。slf

  • 问题内容: 我想在VPS上运行一个用Java编写的非常简单的机器人。我想将jvm内存限制为10MB(我怀疑是否需要更多内存)。 我正在使用以下命令运行机器人: java -Xms5M -Xmx10M -server -jar IrcBot.jar“ / home / jbot” 但是表明为Java保留的实际内存是(或者我在这里解释错了吗?)。 13614 jbot 17 0 144米 16米674

  • 我试图自定义Grails应用程序的日志配置,但appender(及其布局模式)似乎被忽略了。 在配置中。非常棒: Log4J实际上考虑了logger部分(例如,如果我对hibernate的debug和trace行进行注释,那么hibernate语句的记录将按预期停止)。 但我一直在尝试appenders部分的不同版本,似乎都没有考虑,实际上应用于控制台的格式只包括消息本身(例如,如果我编写 在代码

  • 我试图从管理各种Tomcat实例的应用程序生命周期的第三方工具的正常应用程序日志中筛选出启动(/关闭)事件。基础是(2.12.1),中使用,用于简单的追加器(下面的示例进行了大量简化,包括硬编码值): 相应的记录器如下所示: 当我启动实例时,将创建两个日志文件。但是,只有应用程序日志文件(application appender)包含条目,其中包括我感兴趣的要过滤掉的条目: 有什么想法,如何调试,