如何将 HOC 转换为 apollo 的反应组件语法?

相干

谁能帮助我理解如何抽象出 apollo graphQL 逻辑,以便在使用 apollo 和 HOC 与使用更现代的<Query>({data, loading})=>(<MyComponent data={data} loading={loading}/>)</Query>语法之间进行转换或者,如果我不能这样做,您如何在不是整个页面本身的子组件中使用 HOC?next-apollo-appsync用来处理我所有的 graphQL 问题:

import { withAppSyncData } from "next-apollo-appsync";
import AppSyncConfig from "./aws-exports";

const config = {
  url: AppSyncConfig.aws_appsync_graphqlEndpoint,
  region: AppSyncConfig.aws_appsync_region,
  auth: {
    type: AppSyncConfig.aws_appsync_authenticationType,
    apiKey: AppSyncConfig.aws_appsync_apiKey
  }
};

export default withAppSyncData(config);

使用我的 appsync 设置创建 withData 函数后,我使用 withData 函数创建一个 TodosWithData 函数。

import withData from "../../lib/withData";
import gql from "graphql-tag";
import { graphql } from "react-apollo";

const query = gql`
  query listTodos {
    listTodos {
      items {
        id
        name
        completed
      }
    }
  }
`;

const TodosWithData = MyComponent =>
  withData(
    graphql(query, {
      options: {
        fetchPolicy: "cache-and-network"
      },
      props: props => ({ todos: props.data.listTodos ? props.data.listTodos.items : [] })
    })(MyComponent)
  );

export default TodosWithData;

这个函数将一个 react 组件作为输入,并返回包裹在组件周围的 apollo,我们将可以访问 下的数据this.props.data,就像我们期望的那样。奇怪的是,我可以让下面的这个愚蠢的组件工作,但前提是它在页面级别 - 如果我将它移动到我从页面加载的组件中,它就不起作用。

import React from "react";
import TodosQuery from "../graphql/components/todos";

class Todos extends React.Component {
  render() {
    console.log(this.props); //We have access to the apollo payload
    return (
      <div>
        <p>Static Text</p>
      </div>
    );
  }
}

//This is what injects apollo payload into the Todos dumb-component.
export default TodosQuery(Todos); 

这是一个工作回购供参考。我得到的实际错误是Cannot read property 'apollo' of undefined

托马斯·亨尼斯

详细说明我的评论,并使用<Query>语法:

src/index.js

import React from "react";
import withData from "../lib/withData";
import TodosWithData from "../graphql/components/todos";

class App extends React.Component {
  render() {
    console.log("props: ", this.props);
    return (
      <div>
        <p>Hello World</p>
        <TodosWithData />
      </div>
    );
  }
}

export default withData(App);

src/graphql/components/todos.js

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

const query = gql`
  query listTodos {
    listTodos {
      items {
        id
        name
        completed
      }
    }
  }
`;

const TodosWithData = () => (
  <Query query={query} fetchPolicy="cache-and-network">
    {({ loading, error, data: { listTodos } }) => {
      if (error) return <div>Error loading todos</div>
      if (loading) return <div>Loading...</div>
      return (
        <div>
          <ul>
            {listTodos.items.map(todo => (
               <li key={todo.id}>{`${todo.name}${todo.completed ? " - DONE" : ""}`}</li>
            ))}
          </ul>
        </div>
      )
    }}
  </Query>
);

export default TodosWithData;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

sql如何将时间序列数据转换为hoc

来自分类Dev

反应:将CSSProperties转换为样式组件

来自分类Dev

将Apollo GraphQL updateQuery转换为typePolicy

来自分类Dev

如何将这段代码转换为异步等待语法?(反应本机)

来自分类Dev

如何将语法转换为自上而下的可解析语法

来自分类Dev

如何将Xpath语法转换为XSL / XSLT语法?

来自分类Dev

如何将功能组件转换为类组件?

来自分类Dev

如何将类组件转换为功能组件

来自分类Dev

如何将errors_on转换为RSpec 3语法?

来自分类Dev

如何将新的SomeFunction()语法转换为TypeScript?

来自分类Dev

如何将javascript数组转换为Mongodb Shell语法?

来自分类Dev

如何将JavaScript字典转换为Python语法

来自分类Dev

如何将sql转换为excel语法?

来自分类Dev

如何将表单转换为余烬组件?

来自分类Dev

将反应中的功能组件转换为基于类的组件

来自分类Dev

是否可以将IPA从企业转换为Ad Hoc?

来自分类Dev

与多个组件反应HOC

来自分类Dev

如何将Child_process.spawn的“ Promise”语法转换为“ async / await”语法

来自分类Dev

如何将旧的Lambda语法转换为新的Lambda文字语法

来自分类Dev

如何将Á转换为A

来自分类Dev

如何将Á转换为A

来自分类Dev

jsx --watch将jsx语法转换为小写的“反应”,而不是大写的“反应”

来自分类Dev

如何将类组件转换为功能无状态组件?

来自分类Dev

如何将基于类的组件转换为基于函数的组件?

来自分类Dev

如何将基于React类的组件转换为功能组件?

来自分类Dev

如何将基于React类的组件转换为功能组件?

来自分类Dev

如何将基于React类的组件转换为功能组件?

来自分类Dev

如何将基于React类的组件转换为功能组件?

来自分类Dev

如何将UTC日期/时间转换为MDT和军事时间以进行反应应用?

Related 相关文章

  1. 1

    sql如何将时间序列数据转换为hoc

  2. 2

    反应:将CSSProperties转换为样式组件

  3. 3

    将Apollo GraphQL updateQuery转换为typePolicy

  4. 4

    如何将这段代码转换为异步等待语法?(反应本机)

  5. 5

    如何将语法转换为自上而下的可解析语法

  6. 6

    如何将Xpath语法转换为XSL / XSLT语法?

  7. 7

    如何将功能组件转换为类组件?

  8. 8

    如何将类组件转换为功能组件

  9. 9

    如何将errors_on转换为RSpec 3语法?

  10. 10

    如何将新的SomeFunction()语法转换为TypeScript?

  11. 11

    如何将javascript数组转换为Mongodb Shell语法?

  12. 12

    如何将JavaScript字典转换为Python语法

  13. 13

    如何将sql转换为excel语法?

  14. 14

    如何将表单转换为余烬组件?

  15. 15

    将反应中的功能组件转换为基于类的组件

  16. 16

    是否可以将IPA从企业转换为Ad Hoc?

  17. 17

    与多个组件反应HOC

  18. 18

    如何将Child_process.spawn的“ Promise”语法转换为“ async / await”语法

  19. 19

    如何将旧的Lambda语法转换为新的Lambda文字语法

  20. 20

    如何将Á转换为A

  21. 21

    如何将Á转换为A

  22. 22

    jsx --watch将jsx语法转换为小写的“反应”,而不是大写的“反应”

  23. 23

    如何将类组件转换为功能无状态组件?

  24. 24

    如何将基于类的组件转换为基于函数的组件?

  25. 25

    如何将基于React类的组件转换为功能组件?

  26. 26

    如何将基于React类的组件转换为功能组件?

  27. 27

    如何将基于React类的组件转换为功能组件?

  28. 28

    如何将基于React类的组件转换为功能组件?

  29. 29

    如何将UTC日期/时间转换为MDT和军事时间以进行反应应用?

热门标签

归档