我也想使用突变来上传文件,但是我找不到任何方法来跟踪突变的进度(它的上传,类似于 XMLHttpRequest 进度事件)。Afaik 中继正在使用 fetch,但 fetch 不提供任何跟踪进度的方法(https://github.com/whatwg/fetch/issues/21)。
那么,最好的解决方案是什么?编写一个使用 XMLHttpRequest 的自定义网络层?但是话又说回来,如何将请求对象的引用返回给Store.commitUpdate
...的调用者?
我正在努力解决反应路由器和中继集成问题。
到目前为止,我坚持这个例子
它使用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) 我想在我的react本机应用程序中启用缓存.我正在使用GraphQL和Relay现代版.我发现在relay now中默认没有启用缓存,但是它们已暴露RelayQueryResponseCache
出来relay-runtime
,我们可以fetchQuery
在API中添加该功能.我在这里和这里阅读有关它的讨论,但还没有看到任何开始的例子.有人可以帮我解决这个问题吗?
编辑:
好的我想出了一个解决方案.我认为它错过了一些东西,但到目前为止它满足了我们的需求.我注意到将任何内容传递QueryRenderer
到cacheConfig
结果中将该值传递到fetchQuery
我的环境中的函数中.所以我创建了一个Component
通过某种关系加载数据并将其解析为json
查询所请求的正确结构的数据.然后我把它归还给州.然后我用创建的'缓存加载器' 扩展了Component
包含QueryRenderer
的内容.现在,当componentWillMount()
我被调用时,我要求缓存数据.在此过程中我设置了this.state.loading = true
所以我能够处理加载状态.从DB读取是异步的.我也在其他组件中使用此类.每个人都处理其缓存数据.我只是把它传递给了QueryRenderer
.
但是我认为这需要为Component
这个缓存支持的每个添加一些额外的逻辑.可能cacheConfig
会将缓存解析器作为并立即解析环境中的缓存数据会更加清晰.
我正忙于开发一个 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) 我正在尝试组合位于 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. 变量)中找到了我的对象“集合”查询模式。继电器返回: …
那么实际上这两种方式是相同还是不同?就良好的架构而言,首选方式应该是什么?为什么?
尝试使用 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) 我正在学习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) 我有以下简单的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) react-relay ×9
reactjs ×6
relaymodern ×4
graphql ×3
react-native ×3
relay ×3
relayjs ×3
graphql-js ×2
csrf ×1
django ×1
javascript ×1
performance ×1
react-router ×1