标签: react-relay

如何订阅relay/graphql突变的进度事件

我也想使用突变来上传文件,但是我找不到任何方法来跟踪突变的进度(它的上传,类似于 XMLHttpRequest 进度事件)。Afaik 中继正在使用 fetch,但 fetch 不提供任何跟踪进度的方法(https://github.com/whatwg/fetch/issues/21)。

那么,最好的解决方案是什么?编写一个使用 XMLHttpRequest 的自定义网络层?但是话又说回来,如何将请求对象的引用返回给Store.commitUpdate...的调用者?

graphql relayjs react-relay

6
推荐指数
1
解决办法
807
查看次数

如何使用带中继的 React 路由器?

我正在努力解决反应路由器和中继集成问题。

到目前为止,我坚持这个例子

它使用useLazyLoadQuery钩子,虽然一切似乎都工作得很好,但我还看到了另一种方法:usePreloadedQuery

文档说useLazyLoadQuery钩子

如果不小心使用,可能会触发多个嵌套或瀑布式往返,并等到渲染开始数据获取(通常可以比渲染早得多开始),从而降低性能。相反,更喜欢 usePreloadedQuery。

然而,目前尚不清楚如何将其与react-router集成,显然,我不想重新发明我自己的路由器......

我注意到的另一件事是usePreloadedQuery应该与 ; 结合使用 useQueryLoader。同时在文档中,他们只需调用即可直接加载它loadQuery()

所以我不确定哪种方式是首选。

我最终得到了这样的包装:

const WrappedHomePage = () => {
  const [queryRef, loadQuery] = useQueryLoader(HomePageQuery);

  // does calling it like this make any sense at all?
  useMemo(() => {
    loadQuery();
  }, [loadQuery]);

  return <HomePage queryRef={queryRef} />;
};

const HomePage = ({ queryRef }) => {
  const query = usePreloadedQuery(
    graphql`
      query HomePageQuery {
        ...HomePageContainer_repository
      }
    `,
    queryRef
  );

  return …
Run Code Online (Sandbox Code Playgroud)

relay reactjs react-router react-relay relaymodern

6
推荐指数
1
解决办法
976
查看次数

中继现代缓存示例

我想在我的react本机应用程序中启用缓存.我正在使用GraphQL和Relay现代版.我发现在relay now中默认没有启用缓存,但是它们已暴露RelayQueryResponseCache出来relay-runtime,我们可以fetchQuery在API中添加该功能.我在这里这里阅读有关它的讨论,但还没有看到任何开始的例子.有人可以帮我解决这个问题吗?

编辑:

好的我想出了一个解决方案.我认为它错过了一些东西,但到目前为止它满足了我们的需求.我注意到将任何内容传递QueryRenderercacheConfig结果中将该值传递到fetchQuery我的环境中的函数中.所以我创建了一个Component通过某种关系加载数据并将其解析为json查询所请求的正确结构的数据.然后我把它归还给州.然后我用创建的'缓存加载器' 扩展了Component包含QueryRenderer的内容.现在,当componentWillMount()我被调用时,我要求缓存数据.在此过程中我设置了this.state.loading = true所以我能够处理加载状态.从DB读取是异步的.我也在其他组件中使用此类.每个人都处理其缓存数据.我只是把它传递给了QueryRenderer.

但是我认为这需要为Component这个缓存支持的每个添加一些额外的逻辑.可能cacheConfig会将缓存解析器作为并立即解析环境中的缓存数据会更加清晰.

relay graphql react-native react-relay

5
推荐指数
0
解决办法
1120
查看次数

如何使用 React Relay 处理 CSRF 令牌

我正忙于开发一个 React Native 应用程序,该应用程序与 Django 服务器上的 GraphQL api 进行通信。

在 React Native 中,我使用 React Relay 尝试处理我的 GraphQL 请求(按照此处找到的指南),但我的请求遇到 403 问题。

回复说CSRF token missing or incorrect,我正在努力找出使其发挥作用的最佳方法。

我知道我需要首先获取 CSRF cookie 令牌,然后以某种方式将其与我的 GraphQL Post 请求一起传递,但运气不佳。我目前的实现如下......

fetch('http://' + ip + ':8000/sign-in/') 
    .then((response) => {
        const cookieHeader = response.headers.map["set-cookie"]; // This gets me a cookie response with a CSRF token
        fetch('http://' + ip + ':8000/graphql', {
          method: 'POST',
          headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json',
            'Cookie': cookieHeader, // Try and pass the …
Run Code Online (Sandbox Code Playgroud)

csrf reactjs react-native react-relay

5
推荐指数
1
解决办法
1524
查看次数

Graphene-Django:在模式中组合查询对象(仅采用第一个参数)

我正在尝试组合位于 Django 2.1 中不同应用程序中的多个查询模式。使用 graphene-django 2.2(已经尝试过 2.1 有同样的问题)。蟒蛇 3.7。

Query 类只注册第一个变量。例如 shop.schema.Query。

import graphene
import graphql_jwt
from django.conf import settings

import about.schema
import shop.schema
import landingpage.schema

class Query(about.schema.Query, shop.schema.Query, landingpage.schema.Query, graphene.ObjectType):
  pass

class Mutation(shop.schema.Mutation, graphene.ObjectType):
  token_auth = graphql_jwt.ObtainJSONWebToken.Field()
  verify_token = graphql_jwt.Verify.Field()
  refresh_token = graphql_jwt.Refresh.Field()

schema = graphene.Schema(query=Query, mutation=Mutation)
Run Code Online (Sandbox Code Playgroud)

为什么会这样?python 3.7中的类有什么改变吗?石墨烯教程说这将继承多个......

class Query(cookbook.ingredients.schema.Query, graphene.ObjectType):
    # This class will inherit from multiple Queries
    # as we begin to add more apps to our project
    pass

schema = graphene.Schema(query=Query)
Run Code Online (Sandbox Code Playgroud)

我正在将我的架构导出到 schema.json 以便将它与反应中继一起使用。我确实从登陆页面(3. 变量)中找到了我的对象“集合”查询模式。继电器返回: …

django reactjs graphql graphene-python react-relay

5
推荐指数
1
解决办法
2265
查看次数

如果我们使用 loadQuery 和 usePreloadedQuery 与 loadQuery 和 useLazyLoadQuery 挂钩,性能会对 React Relay 产生怎样的影响?

  1. loadQuery 和 usePreloadedQuery - 这种组合实际上是高性能的,因为我们在 usePreloadedQuery 挂钩中使用 loadQuery 返回的引用,因此这遵循“render-as-you-fetch”模式。
  2. loadQuery 和 useLazyLoadQuery - 如果我们使用此组合,那么它也会提供与第一个组合相同的性能。根据文档,我们应该将 usePreloadedQuery 查询挂钩与 loadQuery 一起使用。当我们将 LazyLoadQuery 与 loadQuery 结合使用时,它不会进行额外的 API 调用,因为它使用与我们从 loadQuery 获取的相同数据。

那么实际上这两种方式是相同还是不同?就良好的架构而言,首选方式应该是什么?为什么?

performance reactjs react-native react-relay

5
推荐指数
1
解决办法
1315
查看次数

片段不能在此处作为“查询”类型的对象传播

尝试使用 react 中继,今天遇到了这个问题。这是我到目前为止所做的。

根查询:

query {
  tasks {
    id
    taskName
    taskStatus
    userId
  }
}
Run Code Online (Sandbox Code Playgroud)

反应组件层次结构

App   
 ?--TaskList (props: tasks)
    ?--TaskListItem (props: task)
Run Code Online (Sandbox Code Playgroud)

现在由于托管原则,我知道我必须在每个组件中编写片段来描述它们的数据需求。

任务列表项.js

const TaskListItemContainer = createFragmentContainer(
    TaskListItem,
    graphql`
        fragment TaskListItem_task on task {
            id
            taskName
            taskDone
            authorId
        }
    `
);
Run Code Online (Sandbox Code Playgroud)

任务列表.js

const TaskListContainer = createFragmentContainer(
    TaskList,
    graphql`
        fragment TaskList_tasks on task {
            tasks {
                ...TaskListItem_task
            }
        }
    `
);
Run Code Online (Sandbox Code Playgroud)

应用程序.js

<QueryRenderer
   environment={relayEnvironment}
   query={graphql`
       query AppQuery {
         ...TaskList_tasks
       }
     `
   }
Run Code Online (Sandbox Code Playgroud)

当我运行中继编译器时,出现以下错误。

Fragment "TaskList_tasks" cannot be spread here as …
Run Code Online (Sandbox Code Playgroud)

relay graphql-js relayjs react-relay relaymodern

4
推荐指数
1
解决办法
7022
查看次数

React-relay 在片段上无效使用 @refetchable

我正在学习react-relay(v13),并且在使用@refetchable指定分页片段时遇到问题。这是一个非常基本的结构,如果不使用@refetchable,一切都会正常工作(即我可以查询grapql服务器,获取数据,使用Fragment渲染相同的查询/片段而无需分页)

\n

当我在 ProjectsFragment_user 中引入 @refetchable 时,react-relay 编译器给出错误:

\n
[ERROR] \xe2\x9c\x96\xef\xb8\x8e Invalid use of @refetchable on fragment 'ProjectsFragment_user', only supported are fragments on:\n - the Viewer type\n - the Query type\n - the Node interface or types implementing the Node interface\n - @fetchable type\n
Run Code Online (Sandbox Code Playgroud)\n

现在这很令人困惑,因为 ProjectsFragment_user 的查询如下所示:

\n
// Dashboard.js\nexport const dashboardQuery = graphql`\nquery DashboardQuery ($id: ID) {\n  user (id: $id){\n    id \n    name\n    ...ProjectsFragment_user\n  }\n}\n`;\n// then \nconst  data = useLazyLoadQuery(dashboardQuery, {}, {},);\n\n
Run Code Online (Sandbox Code Playgroud)\n
//Projects.js defines fragment\n\nconst {data, loadNext} …
Run Code Online (Sandbox Code Playgroud)

reactjs graphql-js react-relay relaymodern

4
推荐指数
1
解决办法
1560
查看次数

中继编译中继现代代码时,变量不在范围错误中

我有以下简单的Relay Modern代码:

import React, { Component } from 'react';
import PropTypes from 'prop-types';

import {
    QueryRenderer,
    graphql
} from 'react-relay'


import environment from '../../../../../environment'

const CompanyItemQuery = graphql`

query CompanyItem_Query {
  node(id: $companyId) {
    id
    ...on Company {
      id
      name
    }
 }
}
`

class CompanyItem extends Component {

    render() {

        return (
                <QueryRenderer
                    environment={environment}
                    query={CompanyItemQuery}
                    variables={{
                        companyId: 'test',
                    }}
                    render={({error, props}) => {
                        <div>
                            <p>Relay loaded {props.name} company</p>
                        </div>
                }}
                />
        );
    }
};

export default CompanyItem;
Run Code Online (Sandbox Code Playgroud)

我试图在运行之前继续编译代码,我收到以下错误:

> …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs relayjs react-relay relaymodern

1
推荐指数
1
解决办法
503
查看次数