compose 未从react-apollo 导出

2024-06-21

我正在关注 youtube 上的 graphql 教程(https://www.youtube.com/watch?v=ed8SzALpx1Q https://www.youtube.com/watch?v=ed8SzALpx1Q大约3小时16分钟),其中一部分使用compose来自“反应阿波罗”。但是,我收到错误,因为新版本的react-apollo 不导出此错误。

我在网上看到我需要更换import { compose } from "react-apollo" with import { compose } from "recompose"但这样做会产生错误TypeError: Cannot read property 'loading' of undefined我还读到我应该将react-apollo 的导入替换为import * as compose from "lodash"但当我这样做时,我收到其他错误,说× TypeError: lodash__WEBPACK_IMPORTED_MODULE_2__(...) is not a function

App.js:

import React from "react";
import ApolloClient from "apollo-boost";
import { ApolloProvider } from "react-apollo";

import BookList from "./components/BookList";
import AddBook from "./components/AddBook";

//apollo client setup
const client = new ApolloClient({
  uri: "http://localhost:4000/graphql"
});

function App() {
  return (
    <ApolloProvider client={client}>
      <div className="main">
        <h1>My Reading List</h1>
        <BookList />
        <AddBook />
      </div>
    </ApolloProvider>
  );
}

export default App;

查询.js:

import { gql } from "apollo-boost";

const getBooksQuery = gql`
  {
    books {
      name
      id
    }
  }
`;

const getAuthorsQuery = gql`
  {
    authors {
      name
      id
    }
  }
`;

const addBookMutation = gql`
  mutation {
    addBook(name: "", genre: "", authorId: "") {
      name
      id
    }
  }
`;

export { getAuthorsQuery, getBooksQuery, addBookMutation };

AddBooks.js:

import React, { Component } from "react";
import { graphql } from "react-apollo";
import { compose } from "recompose";
// import * as compose from "lodash";
import { getAuthorsQuery, addBookMutation } from "../queries/queries";

class AddBook extends Component {
  state = {
    name: "",
    genre: "",
    authorId: ""
  };

  displayAuthors = () => {
    let data = this.props.data;
    if (data.loading) {
      return <option>loading authors...</option>;
    } else {
      return data.authors.map(author => {
        return (
          <option key={author.id} value={author.id}>
            {author.name}
          </option>
        );
      });
    }
  };

  submitForm(e) {
    e.preventDefault();
    console.log(this.state);
  }

  render() {
    return (
      <form onSubmit={this.submitForm.bind(this)}>
        <div className="field">
          <label>Book name: </label>
          <input
            type="text"
            onChange={e => {
              this.setState({ name: e.target.value });
            }}
          />
        </div>
        <div className="field">
          <label>Genre: </label>
          <input
            type="text"
            onChange={e => {
              this.setState({ genre: e.target.value });
            }}
          />
        </div>
        <div className="field">
          <label>Author: </label>
          <select
            onChange={e => {
              this.setState({ authorId: e.target.value });
            }}
          >
            <option>Select author</option>
            {this.displayAuthors()}
          </select>
        </div>
        <button>+</button>
      </form>
    );
  }
}

export default compose(
  graphql(getAuthorsQuery, { name: "getAuthorsQuery" }),
  graphql(addBookMutation, { name: "addBookMutation" })
)(AddBook);

我期望从react-apollo导入compose并获取查询和突变并使它们在AddBook的道具中可用,所以我可以在displayAuthors()和submitForm()函数中使用它们,但我得到的错误是它不是从react-apollo 导出的,当我尝试在网上找到的建议解决方案时,我收到了上面提到的其他错误。


compose已从 React Apollo 3.0.0 中删除。如果您想使用相同的 HOC 模式,请随意使用 lodash 的相同副本flowRight.

在您的客户端文件夹中安装 lodash

npm install lodash 

并使用它从 lodash 导入 compose(在 flowRight 中使用大写 R)

import {flowRight as compose} from 'lodash';

参考重大变化 https://github.com/apollographql/react-apollo/blob/e9190fac891dd7af3a1690a5d2a1305953fd5a6f/Changelog.md#breaking-changes

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

compose 未从react-apollo 导出 的相关文章

随机推荐

  • 来源和出口有什么区别?

    我正在编写一个 shell 脚本 以读取具有 key value 对的文件并将这些变量设置为环境变量 但我有疑问 如果我这样做source file txt是否会将该文件中定义的变量设置为环境变量 或者我应该逐行读取文件并使用导出命令设置它
  • Spark MLlib - 训练隐式警告

    我在使用时不断看到这些警告trainImplicit WARN TaskSetManager Stage 246 contains a task of very large size 208 KB The maximum recommend
  • 如何检查目录是否有读/写权限

    我有一个如图所示的目录 d wx x x 2 bcheudev bcheudev 4096 Jun 18 06 16 test 这表明该目录没有读取权限 但是当我通过 shell 脚本检查相同内容时 它给出的结果是 dir test 具有读
  • 如何将变量添加到监视窗口

    Visual Studio 2008 专业版 好的 从 自定义 部分 我将 观察 快速观察 等工具栏命令添加到 调试 菜单中 但我想仔细观察一个变量 我们如何将其添加到手表中 我突出显示它并尝试添加它 但它已被禁用 我希望能够首先向手表添加
  • Make:在静态模式规则中设置特定于目标的变量

    我正在使用静态模式规则编写 Makefile 并且我希望为 TARGETS 的每个元素分配一个变量给当前目标名称 此处为 TARGETS a b c d all TARGETS TARGETS DIR TARGETS setup build
  • 是否可以恢复我删除的 xcdatamodel 文件?

    我愚蠢地删除了它 我删除了其中包含不同版本的文件 我可以恢复到旧快照 但从那时起我就已经完成了工作 是否可以恢复到我的存档之一 或者我只能从那里提交 共享 我仍然可以运行该应用程序 但我需要对数据库进行更改 Xcode 将 xcdatamo
  • 在 Jenkins 项目中加载私有存储库子模块

    我目前正试图让詹金斯 克隆项目及其子模块 使用部署密钥配置为 Github 私有存储库验证 Jenkins CI https stackoverflow com questions 5212304 authenticate jenkins
  • ggplot 直方图相对于轴的位置不正确

    我试图这样绘制直方图 Todo lo haremos con base en un variable aleatoria Uniforme 0 1 set seed 26 n 10000 U lt runif n n Supongamos
  • 如何修改.NET Core中的文件访问控制

    我正在尝试更改 NET Core 中文件的权限 然而 似乎FileInfo https msdn microsoft com en us library system io fileinfo setaccesscontrol v vs 11
  • 如何使用 LinkedIn javascript sdk 检索包括所有字段的职位列表?

    我想要获取 LinkedIn 会员在其个人资料中输入的每个职位的 ID 头衔 摘要 开始日期 结束日期 当前状态和公司名称 我测试了一个查询休息控制台 https apigee com console linkedin我得到了想要的结果 查
  • 如何在打字时自动调整垂直离子输入字段的大小

    当我输入长文本时 ion input字段保持相同的高度 我只能看到可用可见区域中的文本 当我输入时 我希望输入字段根据其中的数据自动垂直调整为 2 行或 3 行 My page html code
  • 如何从 Visual Studio 2012 导出 C# 应用程序以在其他计算机上运行?

    我刚刚在 Visual Studio 2012 中制作了我的第一个 C 应用程序 我想以某种方式导出它 以便其他人可以在他们的计算机 包括没有 Visual Studio 2012 的计算机 中使用它 我该怎么做 我是 C 新手 找不到任何
  • 避免使用一本字典的更好代码 - 区分大小写问题

    我有以下方法用数据读取器的值填充字典 数据读取器字段和传递给方法的属性之间可能存在大小写不匹配的情况 在下面的方法中 我首先将属性转换为小写以解决此问题 这会导致两个字典 有没有更好的方法用一本字典来实现这一目标 private Dicti
  • 是否可以使用检测重新定义核心 JDK 类?

    我想重新定义字节码StackOverflowError构造函数 因此当堆栈溢出发生时我有一个 钩子 我想要做的就是在构造函数的开头插入对我选择的静态方法的单个方法调用 是否有可能做到这一点 您应该能够使用两种方法之一来完成此操作 除非在过去
  • CSS 中的 * 有什么作用?

    明星是做什么的 这叫什么 对我来说 这是某种通配符 它叫什么名字 以便我可以阅读它 div zoom 1 this zoom 1 display inline display inline and this whats the differ
  • 读取google地图返回的JSON数据

    在我的应用程序中 我使用 BlackBerry API 来获取纬度和经度 我想通过创建 http 连接使用 Google 地图进行反向地理编码 如何解析数据 然后读取特定元素 例如地址 示例网址 给出回应 name 9 600000 76
  • 如何将逗号分隔的列值与另一个表作为行连接

    我试图通过首先转换我正在成功执行的 SupplierId 列中的逗号分隔值来连接两个表 然而 当我尝试通过外键 DCLink 加入另一个带有供应商名称的表 Vendors 时 问题就出现了 这就是我的意思 原始表的 select 语句 SE
  • 如何推翻受歧视的工会

    我正在尝试对受歧视的联盟实施折叠 DU称为Expr 表示程序表达式 并且通常是递归的 我正在尝试编写一个折叠 以递归方式累积 Exprs 上的操作结果 下面是我尝试写的折叠 let rec foldProceduralExpr folder
  • 尽早检测有问题的 XIB 视图

    我的笔尖名称有一个拼写错误 当我推向导航控制器时 它在代码中被破坏了 弄清楚它并没有花太长时间 但我认为最好尽早断言格式良好 以便更容易弄清楚 问题是它不是零 它只是无法从笔尖正确地形成自己 在 initWithNib 之后是否有更好的断言
  • compose 未从react-apollo 导出

    我正在关注 youtube 上的 graphql 教程 https www youtube com watch v ed8SzALpx1Q https www youtube com watch v ed8SzALpx1Q大约3小时16分钟