小编JCM*_*JCM的帖子

如何将数据持久化(转储)到本地存储并在以后的会话中加载?

我希望从Relay存储中保留一些数据部分,并在以后的会话中再次加载它以获得更好的用户体验.(我正在使用Relay with react native for context).

数据可以相对较大(最多几千条记录),并且不需要与服务器同步100%.我希望跨会话保留记录,因为我不希望每次用户打开应用程序时都重新获取数据.这将是服务器的负担和糟糕的用户体验(加载时间).

relayjs

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

GraphQL/Relay架构无法在"CreateLinkPayload"类型上查询字段"store"

我可以使用CURL和GraphiQL工具成功完成graphql/relay查询和突变:

在此输入图像描述

但是,在我的react/relay应用程序中,我可以查询并将数据导入应用程序,但每次我尝试在应用程序中改变某些内容时,我都会在控制台中收到此错误:

    bundle.js:51511 Uncaught Error: GraphQL validation error ``Cannot query field "store" on type "CreateLinkPayload".`` in file 
`/Users/johndoe/react-relay-project/src/mutations/CreateLinkMutation.js`. Try updating your GraphQL schema if an argument/field/type was recently added.
(anonymous function) @ bundle.js:51511
getFatQuery @ bundle.js:51512
getFatQuery @ bundle.js:35664
getQuery @ bundle.js:35791
_handleCommit @ bundle.js:35539
commit @ bundle.js:35453
commit @ bundle.js:35894
(anonymous function) @ bundle.js:28526
Run Code Online (Sandbox Code Playgroud)

每次我这样做npm start都会收到此错误:

-- GraphQL Validation Error -- CreateLinkMutation --

File:  /Users/johndoe/react-relay-project/src/mutations/CreateLinkMutation.js
Error: Cannot query field "store" on type "CreateLinkPayload".
Source:
> 
>         store …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs graphql relayjs

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

从 package.json 中的源代码编译

我希望明确指出我希望我的依赖项之一需要从 package.json 中的源代码编译到 npm。我在谷歌中搜索,但没有找到任何方法来做到这一点。这可能吗?

node.js npm

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

Edge.node字段类型必须是输出类型,但得到:undefined

我正在尝试使用与Relay兼容的GraphQL架构设置node.js服务器.

尝试验证或加载架构时,我收到以下错误:

EventEdge.node field type must be Output Type but got: undefined.

这是由于在其他类型定义之一中为Event类型提供了连接类型.

我不会发布整个架构,因为它非常详细,但是当连接字段被注释掉时,架构被正确加载并且不会抛出任何错误.

我已经包含了导致相同问题的简化模式的示例:

  const graphql       = require('graphql')
  const relay         = require('graphql-relay')

  const GraphQLID         = graphql.GraphQLID,
        GraphQLInt        = graphql.GraphQLInt,
        GraphQLString     = graphql.GraphQLString,
        GraphQLList       = graphql.GraphQLList,
        GraphQLObjectType = graphql.GraphQLObjectType,
        GraphQLSchema     = graphql.GraphQLSchema,
        GraphQLNonNull    = graphql.GraphQLNonNull

  const connectionArgs               = relay.connectionArgs,
        connectionDefinitions        = relay.connectionDefinitions,
        connectionFromArray          = relay.connectionFromArray,
        cursorForObjectInConnection  = relay.cursorForObjectInConnection,
        fromGlobalId                 = relay.fromGlobalId,
        globalIdField                = relay.globalIdField,
        mutationWithClientMutationId = relay.mutationWithClientMutationId,
        nodeDefinitions              = relay.nodeDefinitions,
        toGlobalId                   = relay.toGlobalId

  // Models (ORM Mappings)
  const models = …
Run Code Online (Sandbox Code Playgroud)

node.js graphql graphql-js relayjs

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

嵌套的React / Relay组件未接收道具

我正在尝试将属性传递到另一个组件。将数组作为<VideoList videos={this.props.channel.video_list}></VideoList>结果传递会this.props.videos成为一个空对象:

{
  "videos": {
    "__dataID__": "client:5610611954",
    "__fragments__": {
      "2::client": "client:5610611954"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

(GraphQL根据React Chrome扩展程序的确认返回了正确的数据,只是没有传递给VideoList。)

组件/video_list.js

import React from 'react'
import Relay from 'react-relay'
import VideoItem from '../containers/video_item'    

export default class VideoList extends React.Component {
  render() {
    return(
      <div>
      {
        this.props.videos.edges.map(video =>
          <VideoItem key={video.id} video={video.node}/>
        )
      }
      </div>
    )
  }
}
Run Code Online (Sandbox Code Playgroud)

组件/channel_list.js

import React from 'react'
import Relay from 'react-relay'
import VideoList from './video_list'

export default class ChannelView extends React.Component {
  render() { …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs graphql relayjs

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

如何清除/清空/重置中继存储?

我正在使用一个反应原生的继电器.

我想在用户注销时完全清除Relay商店.

我无法从此页面找到API

relayjs

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

如何在不查询服务器的情况下手动更新中继存储?

假设我有一些数据是通过非graphql端点获得的,例如来自第三方服务器(firebase).

如何将数据放入本地中继存储区?是否有一种简单的方法可以直接向中继存储添加/编辑/覆盖数据,而无需通过查询或变异?

relayjs

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

React Relay项目目录结构组织

我开始使用Relay和我开始构建项目[我对我的项目结构感到困惑(我确实使用了同构方法).

这是我正常的React项目结构:

-- project
     |-----src
     |       |---components (React components with their respective .css styles)
     |       |---containers (React/Redux containers)
     |       |---helpers (Helpers, common to components and containers)
     |       |---redux (Redux stores)
     |       server.js (node server code)
     |       client.js (client code)
     |       routes.js (routes)
     |       config.js (application config)
     |
     |-----static
     |       |-- ... (static files)
     |-----webpack 
     |       |-- ... (webpack configuration files)
Run Code Online (Sandbox Code Playgroud)

在React/Redux中,容器在概念上是一个"智能组件"(请参阅此链接,以便在组件(纯React组件)和容器(带有redux数据的"智能组件")中区分它们.

现在,当我转向Relay时,容器在概念上仅与数据相关,与React组件有关(参见此处),这将改变上面的目录结构.

问题:

a)我应该将组件和容器保存为单独的目录吗?

b)我应该将它们称为所有组件并将其构造为:

  src
   |------ containers
               |-------- itemcontainer.js (relay container)
               |-------- itemcomponent.js …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs relayjs

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

用户组表架构

我正在创建一个用户可以加入和创建组的系统.在这些组中,成员可以创建主题并回复已创建的主题,因此我想知道您对以下哪种方法最佳的看法:创建两个表,groups_posts和group_topics:

--group_topics
id PK
group_id int FK
user_id int FK
title varchar(50)
content varchar(500)
status int

--group_posts
id PK
topic_id int FK
user_id int FK
content varchar(500)
status int
Run Code Online (Sandbox Code Playgroud)

或创建一个唯一的表,group_tposts:

--group_tposts
id PK
group_id int FK
user_id int FK
is_topic boolean
title varchar(50)
content varchar(500)
status int
Run Code Online (Sandbox Code Playgroud)

mysql schema database-design db-schema database-schema

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

"connectionArgs"Relay js的附加参数

例如,我有连接类型:

let usersType = new GraphQLObjectType({
    name: 'Users',
    description: 'users array',
    fields: () => ({
        array: {
            type: userConnection,
            description: 'all users',
            args: connectionArgs,
            searchFor: {
                type: GraphQLString
            },
            resolve: (root, args) => {
                return connectionFromArray(get(), args);
            }
        }
    })
});
Run Code Online (Sandbox Code Playgroud)

在这种情况下,在查询中我只能指定(first,last,after,before)参数,但如果我需要传递一些额外的参数,如userName等,那该怎么办呢?

基本上我需要这样的东西:

query {
    array (first: 1, userName: "name")
}
Run Code Online (Sandbox Code Playgroud)

在用户类型我可以处理如下请求:

resolve: (root, args) => connectionFromArray(get(args.userName), args.args)
Run Code Online (Sandbox Code Playgroud)

javascript graphql graphql-js relayjs

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