当我在学习过程中将Apollo和graphQL集成到我的一个项目中时,所有人都会接触到你们.到目前为止它还可以,但现在我想尝试一些突变,我正在努力使用Input类型和Query类型.我觉得它比它应该更复杂,因此我正在寻找关于如何管理我的情况的建议.我在网上找到的例子总是有非常基本的模式,但实际情况总是比较复杂,因为我的模式很大,看起来如下(我只复制一部分):
type Calculation {
_id: String!
userId: String!
data: CalculationData
lastUpdated: Int
name: String
}
type CalculationData {
Loads: [Load]
validated: Boolean
x: Float
y: Float
z: Float
Inputs: [Input]
metric: Boolean
}
Run Code Online (Sandbox Code Playgroud)
然后定义输入和加载,依此类推......
为此,我想要一个变种来保存"计算",所以在同一个文件中我有这个:
type Mutation {
saveCalculation(data: CalculationData!, name: String!): Calculation
}
Run Code Online (Sandbox Code Playgroud)
我的解析器如下:
export default resolvers = {
Mutation: {
saveCalculation(obj, args, context) {
if(context.user && context.user._id){
const calculationId = Calculations.insert({
userId: context.user._id,
data: args.data,
name: args.name
})
return Calculations.findOne({ _id: calculationId})
}
throw new Error('Need an account …Run Code Online (Sandbox Code Playgroud) 我对 expo 和 react-native(create-react-native-app)很陌生,我面临一个问题,经过多次研究,我看到了问题,但没有看到解决方案。
我开发了我的应用程序,它应该只是前端,不需要数据库或身份验证,但我仍然需要使用 Google Places API 和电子邮件发送提供商 API(可能是 sendgrid、mailjet ...),我正面临着这个问题我认为我不会是第一个面临的问题:
我到处都读到你不应该在你的应用程序中存储任何秘密密钥,我明白为什么。但是我在任何地方都找不到简单的解决方案?
我找到了以下包:
https://github.com/goatandsheep/react-native-dotenv 但我怀疑它是否解决了这个问题,因为它还保留了应用程序中的所有内容。
我发现以下自述文件:
https://github.com/EQimper/blog/blob/master/content/post/where-do-i-put-secret-key-in-expo-project.md 但我真的不认为它使任何安全.
我真的希望有人能引导我找到解决这个问题的最简单的方法。如果解决方案是:有一个后端并使用此身份验证服务,请多加开发它(任何教程或其他信息?)
看到我的应用程序已完全准备就绪,但出于安全原因我无法将其放到网上,这让我非常沮丧。
非常感谢。
我的流星/反应/阿波罗(带提升)项目有问题。当我从服务器查询数据时,它会将 __typename 添加到我查询中的每个对象和子对象,但在我的情况下,它会产生一个主要问题,因为我通常会重用这些数据将它们发送到其他突变。现在另一个突变告诉我有一个错误,因为 __typename 字段没有在我的 graphql 模式中定义。
我试图通过将 addTypename: false 字段添加到我的 apollo 客户端来修复,但它没有改变任何东西(注意我正在使用 apollo boost,这可能是它不工作的原因):
const client = new ApolloClient({
uri: Meteor.absoluteUrl('graphql'),
addTypename: false,
request: operation =>
operation.setContext(() => ({
headers: {
authorization: Accounts._storedLoginToken()
}
}))
})
Run Code Online (Sandbox Code Playgroud)
此外,即使它有效,它似乎也不是很优化。在我看来,将字段添加到查询结果中似乎很成问题,我很惊讶没有在网上找到任何明确的解决方案。一些建议的解决方案,其中:
但它们似乎都不符合阿波罗假设为查询带来的“简单性”。我希望提供一个更简单、更合乎逻辑的解决方案,但到目前为止,找不到任何解决方案。
我正在努力解决所谓的简单去抖动问题。但不知何故,它不是等待和触发一次,而是等待但触发所有事件,直到最后一个。
它是反应组件的一部分。这是代码:
import debounce from "lodash.debounce";
(...)
export default () => {
const { filter, updateFilter } = useContext(AppContext);
const [searchString, setSearchString] = useState(filter.searchString);
const changeFilter = value => {
console.log(value);
};
const changeFilterDebounced = debounce(changeFilter, 3000, true);
const handleChange = e => {
let { value } = e.target;
setSearchString(value);
changeFilterDebounced(value);
};
(...)
Run Code Online (Sandbox Code Playgroud)
所以如果我在输入中输入类似“abc”的东西
onChange={handleChange}
Run Code Online (Sandbox Code Playgroud)
它等待一点(三秒钟),然后将显示三个连续的 console.log,其中包含值“a”、“ab”、“abc”。我的期望是它只用“abc”触发一次。我想知道我在哪里遗漏了什么。试图添加 true 作为第三个参数,但没有改变任何东西,我还在创建一个带有 debounce 的特定函数,而不是像其他帖子中提到的那样每次都创建一个新的 debounce。
谢谢你的帮助。
apollo ×2
graphql ×2
reactjs ×2
api-key ×1
apollo-boost ×1
debounce ×1
expo ×1
javascript ×1
lodash ×1
meteor ×1
react-native ×1