我知道这是一个比较常见的问题,但我的实现与其他帖子不同。我正在使用最基本的实现,但我无法开始工作。我使用 Sequelize 和 MySQL 作为数据库实现。
解析器.js
const resolvers = {
Query: {
async getStudent (root, { id }, { models }) {
return models.User.findByPk(id)
},
},
Mutation: {
async createUser (root, { name, email }, { models }) {
return models.User.create({
name,
email
})
},
},
}
Run Code Online (Sandbox Code Playgroud)
架构.js
const { gql } = require('apollo-server-express');
const typeDefs = gql`
type User {
id: Int!
name: String!
email: String!
}
type Query {
getUser(id: Int!): User
getAllUsers: [User!]!
}
type Mutation { …Run Code Online (Sandbox Code Playgroud) 我有一个订阅,比方说postIsRead,它表示当前正在阅读的帖子列表中的帖子,例如:
帖子:{id:1,阅读:true}
...管他呢。一次只能阅读一篇文章。无论如何,这是通过subscribeToMore在订阅上的updateQuery。
updateQuery: (prev, { subscriptionData }) => {
if (!subscriptionData.data) return prev;
let posts = [...prev.posts];
posts.forEach((f)=> {
f.id === subscriptionData.data.postIsRead.id
? f.read = subscriptionData.data.getPosts.read
: f.read = false
});
return Object.assign({}, prev, {
getPosts: posts
});
}
Run Code Online (Sandbox Code Playgroud)
现在有两个问题:帖子的状态不会立即传播,例如在渲染帖子时,在多个帖子上读取=== true。它似乎滞后了,好像是在延迟加载之类的。我不确定这是React问题还是Apollo问题。
在对此进行故障排除时,它甚至变得更奇怪。我注释掉了updateQuery函数中的所有代码,使得:
updateQuery: (prev, { subscriptionData }) => {}
Run Code Online (Sandbox Code Playgroud)
...将订阅值更新为:true。我似乎误解了它是如何工作的,因为即使函数未返回任何内容,它也在传播更改。但是,如果我完全删除updateQuery,则不会发生更改。
具体来说(为了赏金),我试图了解在订阅更新时提出更改的最佳方法。
reactjs graphql react-apollo graphql-subscriptions apollo-client
在实施multidex时,每当我同步项目时都会遇到以下错误。
解决失败:Multidex仪器
这是相关的应用程序级别的build.gradle:
android {
compileSdkVersion 28
defaultConfig {
applicationId "xxx.xyz.zzz"
minSdkVersion 16
targetSdkVersion 22
multiDexEnabled true
versionCode 1
versionName "1.0"
ndk {
abiFilters "armeabi-v7a", "x86"
}
}
}
dependencies {
compile 'com.android.support:multidex:1.0.3'
....and the rest
}
Run Code Online (Sandbox Code Playgroud)
以及相关的项目级别的build.gradle:
buildscript {
repositories {
google()
jcenter()
maven { url 'https://maven.fabric.io/public' }
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.2'
classpath 'com.google.gms:google-services:3.1.2'
classpath 'io.fabric.tools:gradle:1.+'
}
}
allprojects {
repositories {
mavenLocal()
mavenCentral()
jcenter()
maven {
url "$rootDir/../node_modules/react-native/android"
}
google()
}
}
Run Code Online (Sandbox Code Playgroud)
我在这里想念什么?
我的项目构建失败,因为它使用了错误的目录来运行Node。如何为这些编译时任务设置Node目录?
具体任务是:
app:recordFilesBeforeBundleCommandDebug
和相关的错误:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:recordFilesBeforeBundleCommandDebug'.
Caused by: org.gradle.process.internal.ExecException: A problem occurred starting process 'command 'node''
Caused by: net.rubygrapefruit.platform.NativeException: Could not start 'node'
Caused by: java.io.IOException: Cannot run program "node" (in directory "/Users/me/Code/appname/android/app"): error=2, No such file or directory
Caused by: java.io.IOException: error=2, No such file or directory
Run Code Online (Sandbox Code Playgroud) 有没有办法导航到用户当前所在的场景?几乎相当于刷新组件?
我有一个名为 ProfileScreen 的可重用组件,它显示用户的个人资料。默认情况下,该用户是登录用户;但也可以是他们在不同屏幕上选择的用户。
问题是,如果用户在另一个用户的个人资料上,并尝试导航(通过抽屉)到他们自己的个人资料,它什么都不做。我尝试混淆 redux 函数内部的导航操作,但无济于事。
现在我让它在导航回配置文件场景之前简要导航到“加载”组件,但这远不是最佳解决方案。
有什么想法吗?
android ×2
gradle ×2
graphql ×2
react-native ×2
java ×1
maven ×1
node.js ×1
react-apollo ×1
reactjs ×1
sequelize.js ×1