草庐IT

javascript - React、Apollo 2、GraphQL、身份验证。如何在登录后重新渲染组件

我有这个代码:https://codesandbox.io/s/507w9qxrrl我不明白:1)如何在以下之后重新渲染()Menu组件:this.props.client.query({query:CURRENT_USER_QUERY,fetchPolicy:"network-only"});如果我login()我希望我的Menu组件重新渲染()本身。但是什么也没有。只有当我点击Home链接时,它才会重新渲染()本身。我怀疑是因为我正在使用它来渲染它:在react-routerprops中拥抱它。有错吗?另外,如果在login()之后检查Menu的this.props,我会永远看到l

javascript - 中继现代 RefetchContainer Prop 未传递给组件

我在RelayModern中设置refetchContainer时遇到一些问题。父组件是QueryRenderer,它运行初始查询,适本地填充子组件的Prop(a-prop-riately?嗯?嗯?!)。refetchContainer指定了我们所有的变量,并在输入字段的onChange事件上,使用新变量重新运行查询。这一切都很完美,除了child的Prop永远不会用收到的新数据更新。我可以深入中继存储并查看确实收到了带有适当数据的查询。一段时间以来我一直在反对这个问题,我会很感激一些帮助。可能我缺少一些简单的东西。上帝知道RelayModern文档很少。我四处寻找,找不到合适的解决方

javascript - Apollo-client (react) - 创建突变的更新 - "Can' t 在对象 (ROOT_QUERY) 上找到字段 Fund({})"

使用:“react-apollo”:“^1.4.3”在父组件中,我使用GraphQL查询父节点“Fund”和子节点“fundQuarterlyMetric”。这将返回以下格式的数据:{idname...fundQuarterlyMetrics(orderBy:asAtDate_ASC){idyearquarter...}}当我尝试创建一个新的fundQuarterlyMetrics时,我必须使用更新功能(ApolloClientdocs)更新react-apollo上的本地存储。它给我一个错误:Can'tfindfieldFund({})onobject(ROOT_QUERY){"Fu

javascript - 从另一个突变调用 GraphQL 突变?

是否可以从一个突变中对另一个graphqlType运行一个突变?我不确定这是否是个好主意。理想情况下,最好为每种graphql数据类型创建突变,然后在需要时调用这些函数中的每一个。希望这能让事情变得更干燥。例如,我有2个graphql类型“项目”和“房间”。对于每个项目,都需要创建一个房间,并将ID放置在项目中以供以后引用。我看到了3种方法:从前端,运行2个不同的graphql查询(针对一个新项目和一个新房间),最后一个使用新房间ID更新项目。在后端/graphql服务器上。为简单起见,只需在一个解析函数内处理所有数据库调用,返回创建的项目和房间。在突变中运行突变。从项目创建函数调用房

javascript - 将变量传递给 Gatsby graphql 查询中的正则表达式

我有以下查询,它正在接收变量$tag。目前,我正在根据其frontmatter.keywords的值过滤结果。keywords是逗号分隔的字符串,所以我需要使用正则表达式来检查其中是否包含$tag,但是我不知道如何传递正则表达式中的变量。如果我将一个值硬编码到正则表达式中(如在下面的代码中我硬编码了/example/,则过滤有效。如果我将example替换为$tag我收到一个错误:GraphQLError:Variable"$tag"isneverusedinoperation"TagQuery".exportconstpageQuery=graphql`queryTagQuery($

javascript - 具有基于参数的动态字段的 GraphQL ObjectType

我们的情况是我们的GraphQL查询的响应必须返回对象的一些动态属性。在我们的例子中,我们无法预定义所有可能的属性-因此它必须是动态的。我们认为有两种解决方案。constMyType=newGraphQLObjectType({name:'SomeType',fields:{name:{type:GraphQLString,},elements:{/*THISisourspecialfieldwhichneedstoreturnadynamicobject*/},//...},});正如您在示例代码中看到的,元素属性必须返回一个对象。解决此问题时的响应可能是:{name:'somena

javascript - 如何从服务器执行 GraphQL 查询

我正在使用graphql-express创建一个端点,我可以在其中执行graphql查询。虽然我将Sequelize与SQL数据库一起使用,但直接从我的graphql之外的服务器使用它感觉不对resolve职能。如何从定义它的同一服务器查询我的graphqlAPI?这就是我设置graphql端点的方式:constexpress=require('express');constrouter=express.Router();constgraphqlHTTP=require('express-graphql');constgqlOptions={schema:require('./sche

javascript - GraphQL - 如何响应不同的状态码?

我在使用Graphql和ApolloClient时遇到了问题。我在使用REST时总是创建不同的响应,例如401代码,但在这里我不知道如何做类似的行为。当我得到响应时,我希望它转到catch函数。我的前端代码示例:client.query({query:gql`queryTodoApp{todos{idtextcompleted}}`,}).then(data=>console.log(data)).catch(error=>console.error(error));谁能帮帮我? 最佳答案 在GraphQL中(至少在graphql-

javascript - 如何在没有循环依赖的情况下拆分 GraphQL 中的模式?

我的问题类似于JavascriptcirculardependencyinGraphQLcode但我的问题不在结构和数据库级别,而是在javascript(ES6)中。我的模式定义越来越大,但我看不出在哪里可以将文件切割成碎片。根据不同的对象类型进行切割似乎是合乎逻辑的,但这会导致循环依赖,类似于这个非常简化的非工作示例://--fileA.jsimport{bConnection,getBs}from'B';exportclassA{/*...*/};exportvargetA=(a)=>{/*...*/};exportvargetAs=(array_of_as)=>{/*...*/

javascript - 将 graphQL 片段添加到模式,并可用于所有查询

以下在graphiQL中正确执行fragmentBookGridFieldsonBook{_idtitle}{allBooks{...BookGridFields}}我的问题是,可以在我的模式中指定片段,就在我的Book类型定义的下方,就像这样typeBook{_id:Stringtitle:Stringpages:Intweight:Floatauthors:[Author]}fragmentBookGridFieldsonBook{_idtitle}这样我就可以像这样运行查询{allBooks{...BookGridFields}}无需将片段定义为查询的一部分。目前上面的错误与Un