小编Ivo*_*Ivo的帖子

Apollo/GraphQl - 类型必须是输入类型

当我在学习过程中将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)

meteor apollo graphql

7
推荐指数
1
解决办法
1824
查看次数

expo/react Native 和 SECRET API KEYS

我对 expo 和 react-native(create-react-native-app)很陌生,我面临一个问题,经过多次研究,我看到了问题,但没有看到解决方案。

我开发了我的应用程序,它应该只是前端,不需要数据库或身份验证,但我仍然需要使用 Google Places API 和电子邮件发送提供商 API(可能是 sendgrid、mailjet ...),我正面临着这个问题我认为我不会是第一个面临的问题:

  • 我在哪里存储我所有的 API KEY 和 API SECRET KEY?有没有一种(简单的)安全的方法来做到这一点,而不必进行身份验证和/或完整的后端。

我到处都读到你不应该在你的应用程序中存储任何秘密密钥,我明白为什么。但是我在任何地方都找不到简单的解决方案?

我找到了以下包:

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 但我真的不认为它使任何安全.

我真的希望有人能引导我找到解决这个问题的最简单的方法。如果解决方案是:有一个后端并使用此身份验证服务,请多加开发它(任何教程或其他信息?)

看到我的应用程序已完全准备就绪,但出于安全原因我无法将其放到网上,这让我非常沮丧。

非常感谢。

api-key react-native expo create-react-native-app

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

Apollo boost - 查询中的 __typename 防止新的突变

我的流星/反应/阿波罗(带提升)项目有问题。当我从服务器查询数据时,它会将 __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)

此外,即使它有效,它似乎也不是很优化。在我看来,将字段添加到查询结果中似乎很成问题,我很惊讶没有在网上找到任何明确的解决方案。一些建议的解决方案,其中:

  • 在客户端手动过滤
  • 向 apollo 添加中间件
  • 将 __typename 字段添加到我的所有架构中...

但它们似乎都不符合阿波罗假设为查询带来的“简单性”。我希望提供一个更简单、更合乎逻辑的解决方案,但到目前为止,找不到任何解决方案。

apollo reactjs graphql apollo-client apollo-boost

2
推荐指数
1
解决办法
3405
查看次数

在反应中多次触发去抖动

我正在努力解决所谓的简单去抖动问题。但不知何故,它不是等待和触发一次,而是等待但触发所有事件,直到最后一个。

它是反应组件的一部分。这是代码:

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。

谢谢你的帮助。

javascript lodash reactjs debounce

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