问题标签 [react-router-relay]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
reactjs - 无效的道具/上下文`relay`
我做了一个新鲜的npm install
,突然收到以下错误
这是我的根容器
reactjs - 在 Relay.js 应用程序中清除缓存以注销
我有一个 Relay 应用程序,我想清除登录后显示的组件的缓存。我尝试将 currentRelay.store 传递到我的 Relay.Router 并实现 currentRelay.reset() 将该存储设置为新的 Relay.Environment ,然后在注销后调用它。由于某种原因,缓存仍然被存储。我还尝试在 componentDidMount() 中调用 this.props.relay.forceFetch({}) 和 this.forceUpdate()。我可以清除缓存的唯一方法是手动刷新页面。我想知道 Relay.Environment 中是否存在错误,或者我做错了。
react-router - 如何避免多节点查询?
我的应用中有 3 个页面(使用 的组件react-router-relay
)ProductList
、ProductDetail
和BrandList
.
为了说明问题,让我看一下流程并将代码留在底部。
首先我去
ProductList
查看产品列表,每个产品都有品牌名称。它按预期工作。然后我点击其中一个产品,这将呈现
ProductDetail
. 一切仍然按预期工作。现在当我去时
BrandList
,问题是中继向node(id: $id_0)
服务器发送多个查询。
发生的情况是 Relay 的商店已经brands
在ProductDetail
. 在第 3 步中,BrandList
要求提供比 Relay 商店当前拥有的更多的字段。所以 Relay 发送了多个node
查询,30 个查询,因为我有 30 个品牌,但是这效率低下并且明显慢。
我可以通过询问([A]) 和([B])中的相同字段来解决此问题(请参阅下面的查询)。但是,这意味着获取它不使用的不必要的字段。ProductDetail
BrandList
ProductDetail
我不确定我是否在这里遗漏了一些非常明显的东西,或者在这种情况下有更好的方法来避免多节点查询。如果我可以告诉 Relaybrands
在上面的步骤 3 中完全重新获取 Relay 已经存储了部分数据并发送node
查询以获取更多字段,那会更好。
// 每个组件的相关查询。请注意下面关于[A]和[B]的评论
ProductList
ProductDetail
BrandList
react-router - 路由完全渲染时的回调
onUpdate
启动渲染时似乎调用了路由器的回调,有没有其他方法可以在所有组件渲染后调用函数?
类似的ReactDOM.render
回调...
javascript - 如何使用 Relay 容器、react-router 和 GraphQL 按 id 获取和显示项目
我很难理解中继路由、react-router 参数以及构建查询和容器!
当用户单击 FeatureList 中的特定功能时,我想编辑功能。它传递了一个名为“id”的参数,它是 Route.js 中 Feature 的 id
在我的 FeatureQuery 文件中,我有以下查询:
在这一点上,我完全被卡住了。如何扩展它以包含“id”并使用“id”查询功能?相关的中继容器片段会是什么形状?我只看到深入一层的例子。
我试过了,但我知道这是不对的:
这是获取功能列表的当前中继容器,如何修改它以仅通过 id 返回 1 功能?:
我在 GraphiQL 中测试了一个查询,它按预期工作:
结果:
架构.js:
reactjs - 使用 react-router-relay 访问要在查询中使用的 url 参数
我正在使用 react-router 和 react-router-relay 来处理我的应用程序上的路由。我在尝试访问在 url 路径中传递的 id 参数时遇到问题。这样做的正确方法是什么?
路由.js
创意查询.js
javascript - 在嵌套的 react-router-relay 路由中组合查询
我有一个架构,其viewer
最顶层的根元素和所有其他数据都在它之下:viewer
有一个列表users
并提供一个user(id)
. 我的根查询中没有其他元素。
我的根组件定义了以下路线:
这些是查询 - 我不知道如何UserQueries
嵌套,ViewerQueries
或者这是否可能:
我对UserDetails
组件的目标是从
目前,尝试此操作时出现以下错误:
我如何教 react-router-relay 让它UserDetails
从中获取数据
query { viewer { user(id) } }
而不仅仅是从
query { user(id) }
?
reactjs - 使用`setVariables`后中继生成无效查询-我做错了吗?
出于某种原因,如果我生成一个根查询,它在注入子组件之前接受参数,如下所示:
Relay 最初生成这个查询:
变量:
但是,如果组件的中继容器有自己的变量,运行this.props.relay.setVariables({...variables})
会完全将中继生成的请求查询变成这样:
变量:
但是,如果我有一个没有参数的根查询,setVariables 可以正常工作:
这是生成的查询:
变量:
在工作设置中的 setVariables 之后:
变量:
版本:
我不确定我的配置是否有问题,或者这只是 Relay 端的错误。
有谁知道可能导致此问题的原因?
typescript - 为 react-router-relay 创建新的类型定义
我想为 react-router-relay 创建 Typescript 定义,但是 react-router-relay 的扩展性质让我很难过。react-router 暴露了一个带有一些属性的路由器组件,还包括一个渲染属性。react-router-relay 使用此渲染属性为路由器提供中间件。在此路由器还接受可以提供中继的环境属性之后。
如何告诉 typescript 在我的模块 react-router-relay 中我扩展了模块 react-router 的定义?
我尝试了以下操作,但随后我将不得不复制 react-router 的每个组件:
是否也可以直接扩展 react-router 的 RouterProps 和 RouteProps ?
编辑:路由器中继的应用如下: