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

撰写未从react apollo导出

皇甫福
2023-03-14

我正在关注youtube上的graphql教程(https://www.youtube.com/watch?v=ed8SzALpx1Q大约3小时16分钟),部分使用“react apollo”中的“compose”。然而,我得到了一个错误,因为新版的react apollo没有导出这个。

我在网上读到,我需要将来自“react apollo”的导入{compose}替换为来自“recompose”的导入{compose},但这样做会产生错误类型错误:无法读取未定义的属性“loading”,我还读到我应该将来自react apollo的导入替换为来自“lodash”的导入{code错误,表示<代码>×类型错误:lodash\uu WEBPACK\u IMPORTED\u MODULE\u 2\uuu(…)不是函数

pp.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;

queries.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);

我希望compose是从react apollo导入的,并接受查询和变异,使它们在AddBook的道具中可用,因此我可以在displayAuthors()和submitForm()函数中使用它们,但我得到的错误是它不是从react apollo导出的,当我尝试在线找到的建议解决方案时,我得到了上面提到的其他错误。

共有3个答案

冉昊
2023-03-14

下面是我如何用我的项目解决这个问题的:

>

npm安装lodash。flowright流程

将其导入AddBook。js或要使用compose的文件中

从“lodash”导入撰写。flowright'

潘银龙
2023-03-14

合成已从React Apollo 3中删除(请参见突破性更改)。现在,要使用compose,请使用lodash的flowRight。

安装flow right:

纱线添加lodash。右流

在代码中替换:

从“react apollo”导入{compose}

通过

<代码>从“lodash”导入{flowRight as compose}

田志
2023-03-14

compose已从React Apollo 3.0.0中删除。如果您想使用相同的HOC模式,请随时使用相同的洛达什的flow right副本。

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

npm install lodash 

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

import {flowRight as compose} from 'lodash';

制动变化参考

 类似资料:
  • 我有一个nginx的dockerfile。 我有一个docker-compose.yml文件。 运行后 docker合成 它从名为“web”的dockerfile创建图像,并下载redis图像。它还创建了名为“web\u web1”的图像和当我检查 docker ps nginx和redis服务都在运行。我的问题是,如果我将新创建的映像提交到另一个映像并导出容器并导入到另一个环境,在执行docke

  • Jeklly 的一个最好的特点是『关注 blog 本身』。这是指什么呢?简单的说就是写博客的过程被铸造进了 Jekyll 的功能中。你只需简单的管理你电脑中的一个文件夹下的文本文件就可以写文章并方便的在线上发布。与繁琐的配置和维护数据库和基于网站的内容管理系统 (CMS) 相比,这是一个非常受欢迎的改变。 文章文件夹 在目录结构介绍中说明过,所有的文章都在 _posts 文件夹中。这些文件可以用

  • 如何撰写 markdown 源码并安排目录结构. 目录结构 文档是普通的 Markdown 文件, 放到项目目录里. 通常目录以 docs 命名, 和 mkdocs.yml 配置文件一起放置于项目的顶级目录中. 最简单的项目目录结构可能是这样的: mkdocs.yml docs/ index.md 默认项目主页是 index. Markdown 源码文件的后缀可以是以下任意一种: mar

  • 这是我的导航主机 我从主屏幕到“开始”屏幕很幼稚,但没有从“开始”导航到“计时器”屏幕,我已经传递了与从主屏幕获得的相同的ID。 这个主要可组合的 开始屏幕 当我点击按钮时,应用程序崩溃,错误如下

  • 所以我试图用Jetpack Compose创建一个应用程序。我有一个屏幕功能,它包含一个没有顶部应用程序栏的脚手架,一个用于导航的底部栏和一个设置在底部栏中的浮动操作按钮。这一切都很好。 但是,当我将NavHost添加到脚手架的内容时,整个事情就停止了工作。没有NavHost,一切都很好,只是内容是屏幕的可组合功能。我尝试了不同数量的NavHost可组合位置,不同的填充值都无济于事。 没有NavH

  • 问题内容: 使用以下文件: 上面文件中的服务启动了卷容器,该卷容器在Docker主机的文件夹中创建了匿名卷,并在卷容器()中创建了挂载点。 服务中的指令是否在容器中创建安装点?这点挂载点的容器? 问题答案: 从 文档: 从另一个服务或容器挂载所有卷… 所以简短的答案 是 : 在服务内部 装入由服务定义的卷。 长答案: 要回答您的问题,让我们运行该服务: 在回答您的问题之前,让我们确保描述清楚: 上