为什么我不能使用Apollo Link State添加Todo?

时间:2018-05-13 11:04:11

标签: javascript reactjs apollo react-apollo apollo-client

Todo永远不会被添加。可视性过滤器工作&远程Coinbase获取工作。

这是我的回购

https://github.com/deadcoder0904/apollo-coinbase

&安培;这里是相同的代码沙箱

https://codesandbox.io/s/github/apollographql/apollo-link-state/tree/master/examples/todo

该示例与codeandbox类似,只有远程URI,用于从某些硬币的coinbase API获取

我复制了相同的例子

只需2次更改

第一个更改是我添加了一个HTTPLink,用于使用Coinbase API获取远程数据

第二个变化是我没有使用Apollo-Boost&明确导入其他所有内容

我不明白bcz代码字面上相似的区别(他们正在使用apollo-boost& i我已经使用了不同的单块并且放弃了)

addTodo变异在TodoForm.js中无效:)

TodoForm.js

import React from "react";
import gql from "graphql-tag";
import { Mutation } from "react-apollo";

const ADD_TODO = gql`
  mutation addTodo($text: String!) {
    addTodo(text: $text) @client {
      id
    }
  }
`;

const TodoForm = () => (
  <Mutation mutation={ADD_TODO}>
    {addTodo => {
      let input;
      return (
        <form
          onSubmit={e => {
            e.preventDefault();
            if (!input.value.trim()) return;
            addTodo({ variables: { text: input.value } });
            input.value = "";
          }}
        >
          <input
            type="text"
            ref={node => {
              input = node;
            }}
          />
          <button type="submit">Add Todo</button>
        </form>
      );
    }}
  </Mutation>
);

export { TodoForm };

错误是 -

  

[网络错误]:TypeError:   对象( WEBPACK_IMPORTED_MODULE_0_graphql_tag [&#34; gql&#34;])不是   功能。 (在   &#39;对象(的 WEBPACK_IMPORTED_MODULE_0_graphql_tag [&#34; GQL&#34;])(_ templateObject)&#39 ;,   &#39;对象(的 WEBPACK_IMPORTED_MODULE_0_graphql_tag [&#34; GQL&#34;])&#39;是一个   App.js上的Object实例:46

2 个答案:

答案 0 :(得分:1)

它认为gql不是函数(可能是未定义的)。应该很容易打印出来看看。如果你有一个糟糕的graphql-tag版本,我不会感到惊讶。将其设置为package.json

中的固定版本

答案 1 :(得分:0)

找到解决方案。我想我必须习惯于正确阅读日志。

我在./resolvers/todos档案中犯了一个小错误。在其他任何地方都很好

我实际上将gql导入为命名导出,如 -

import { gql } from 'graphql-tag';

当我应该使用默认导出时 -

import gql from 'graphql-tag';