文件上传似乎是一种变异.它通常伴随着其他数据.但它是一个很大的二进制blob,所以我不确定GraphQL如何处理它.如何将文件上传集成到使用Relay构建的应用程序中?
来自Facebook的官方消息是,Relay" 故意不了解身份验证机制".在中继存储库中的所有示例中,身份验证和访问控制是一个单独的问题.实际上,我还没有找到一种简单的方法来实现这种分离.
Relay存储库中提供的示例都具有根模式,其中的viewer字段假定有一个用户.该用户可以访问所有内容.
然而,实际上,应用程序具有许多用户,并且每个用户对每个节点具有不同的访问程度.
假设我在JavaScript中有这个架构:
export const Schema = new GraphQLSchema({
query: new GraphQLObjectType({
name: 'Query',
fields: () => ({
node: nodeField,
user: {
type: new GraphQLObjectType({
name: 'User',
args: {
// The `id` of the user being queried for
id: { type: new GraphQLNonNull(GraphQLID) },
// Identity the user who is querying
session: { type: new GraphQLInputObjectType({ ... }) },
},
resolve: (_, { id, session }) => {
// Given `session, get user with `id` …Run Code Online (Sandbox Code Playgroud) Facebook没有提到他们的GraphQL库的身份验证.
假设我有一个可以从GraphQL获取的用户表,我不希望向除了登录用户之外的任何需要它的人透露用户信息,我应该在什么级别添加认证层?
在模式级别通过改变"登录"状态?
或者可能通过将额外的参数传递给graphql当前只需要的函数query和schema?
默认的react-router用作如下:
import * as React from 'react';
import { Router, Route, hashHistory } from 'react-router';
const routing = (
<Router history={hashHistory}>
<Route path="/login" component={Login}/>
</Router>
};
Run Code Online (Sandbox Code Playgroud)
当我包含"react-router-relay"库时,它会为路由器添加功能.即它为路由器组件添加了2个属性(渲染和环境):
import * as React from 'react';
import * as Relay from 'react-relay';
import * as useRelay from 'react-router-relay';
import { Router, Route, hashHistory, applyRouterMiddleware } from 'react-router';
const routing = (
<Router history={hashHistory} render={applyRouterMiddleware(useRelay)} environment={Relay.Store}>
<Route path="/login" component={Login}/>
</Router>
};
Run Code Online (Sandbox Code Playgroud)
我将如何增加反应路由器的类型?
我尝试过一系列方法,最新的方法是:
import { Router } from 'react-router';
declare module 'react-router' {
namespace …Run Code Online (Sandbox Code Playgroud) Facebook宣布推出Relay和GraphQL.但是,它们还没有.是否有替代库可以实现目前可以使用的类似目标?
如何公开graphql端点以响应本机应用程序?有没有人使用中继反应本机应用程序?中继技术概述中的示例https://facebook.github.io/relay/docs/getting-started.html使用webpack来服务中继应用并将其暴露给graphql服务器:
import express from 'express';
import graphQLHTTP from 'express-graphql';
import path from 'path';
import webpack from 'webpack';
import WebpackDevServer from 'webpack-dev-server';
import {StarWarsSchema} from './data/starWarsSchema';
const APP_PORT = 3000;
const GRAPHQL_PORT = 8080;
// Expose a GraphQL endpoint
var graphQLServer = express();
graphQLServer.use('/', graphQLHTTP({schema: StarWarsSchema, pretty: true}));
graphQLServer.listen(GRAPHQL_PORT, () => console.log(
`GraphQL Server is now running on http://localhost:${GRAPHQL_PORT}`
));
// Serve the Relay app
var compiler = webpack({
entry: path.resolve(__dirname, 'js', 'app.js'),
eslint: {
configFile: '.eslintrc'
},
module: …Run Code Online (Sandbox Code Playgroud) 我有两个Relay突变,我正在嵌套,先添加一个对象然后设置它的名字.我相信我传递给第二个突变实际上是由Relay提取的数据,但它似乎不同意我的看法.React视图中的代码如下:
Relay.Store.update(
new AddCampaignFeatureLabelMutation({
campaign: this.props.campaign
}),
{
onSuccess: (data) => {
Relay.Store.update(
new FeatureLabelNameMutation({
featureLabel: data.addCampaignFeatureLabel.featureLabelEdge.node,
name: this.addLabelInputField.value
})
);
},
onFailure: () => {}
}
);
Run Code Online (Sandbox Code Playgroud)
这确实有效,但给了我一个警告:
Warning: RelayMutation: Expected prop `featureLabel` supplied to `FeatureLabelNameMutation` to be data fetched by Relay. This is likely an error unless you are purposely passing in mock data that conforms to the shape of this mutation's fragment.
Run Code Online (Sandbox Code Playgroud)
为什么Relay认为数据没有被提取?我是否需要以某种方式明确地在有效负载中返回新的featureLabel?
我目前正在使用DefaultNetworkLayer中设置的自定义标头处理中继之外的身份验证.这是首选的方式吗?有没有办法在接力中做到这一点?我试图在继电器中实现注册功能时遇到困难:在中继中有以下配置:FIELDS_CHANGE,NODE_DELETE,RANGE_ADD,RANGE_DELETE.所以RANGE_ADD是唯一可以应用的,但是我需要一个父和连接,我没有为新创建的用户....
我是Relay的新手,仍然试图绕过它.根据我的理解,Relay将查询与组件联系起来.这样,您可以说需要从GraphQL服务器提供组件x,y和z.根据我的理解,官方react-relay库将在适当的时间发送这些查询,可能在组件即将呈现时.
对于直接用例,例如简单地显示数据列表,这对我来说都是有意义的.
然而,我对如何做的困惑是如何调度一个可能不属于与组件绑定的类别的查询.查询,例如尝试获取用户身份验证会话令牌或其他内容的查询.这是我目前的情况:我正在尝试创建一个从GraphQL获取会话令牌的用户登录表单.我有一个参数化的GraphQL字段,需要用户名和密码参数,如果它们有效,将返回一个会话令牌.我只是无法弄清楚如何使用Relay来查询该会话令牌.
我基本上只需要调度一个查询,并处理响应(将该会话令牌置于React应用程序状态).
有任何想法吗?
如果他们可以通过什么方式整合它们?一些(反)模式?
我花了一些时间来学习它们,但仍然无法找到在单个应用程序中利用它们(以及它们的优点)的方法.
relayjs ×10
javascript ×6
reactjs ×5
graphql ×4
frontend ×1
graphql-js ×1
react-native ×1
reactjs-flux ×1
redux ×1
typescript ×1