Redux 更新Graphql树,不使用突变击中后端

Redux 更新Graphql树,不使用突变击中后端,redux,graphql,Redux,Graphql,对于一些状态管理数据集,我目前使用graphql而不是Redux。我发现我正在使用服务器端的变异,但是如果我的UI/前端只关心它,为什么我必须创建一个变异,然后攻击服务器。是否有一种方法可以省略该部分并仅通过前端/UI的一些更新来设置graphql数据树 这是我的变异 try { await updateSomething({ // front end only cares about these values, but I do // need them across v

对于一些状态管理数据集,我目前使用graphql而不是Redux。我发现我正在使用服务器端的变异,但是如果我的UI/前端只关心它,为什么我必须创建一个变异,然后攻击服务器。是否有一种方法可以省略该部分并仅通过前端/UI的一些更新来设置graphql数据树

这是我的变异

try {
  await updateSomething({
    // front end only cares about these values, but I do 
    // need them across various components etc..
    variables: {
      id,
      name
    },
    update: (store, { data: { someData } }) => {
      const data = store.readQuery({ query: MY_QUERY });
      data.someArray.push(someData);
      store.writeQuery({ query: MY_QUERY, data });
    }
  });
} catch (e) {
 // deal with error
}
  • 我不知道如何在不必在后端创建解析器的情况下更新graphql树。所以我担心,如果我保存的数据不关心或不需要后端知道,那么不断地点击后端会导致性能下降

  • 当然,我必须为此在前端编写一个变种,但在后端也要编写一个相应的变种/解析器。。。但是,如果我的数据来自前端,并且对数据库等没有影响。。。它只需要充当redux状态机。我如何在不与服务器端变异/解析程序交互的情况下实现这一点?

    既然看起来您已经在使用apollo,您应该利用它。状态链接有效地允许您通过apollo管理客户端状态

    您的客户端设置如下所示:

    import { ApolloClient } from 'apollo-client'
    import { ApolloLink } from 'apollo-link'
    import { InMemoryCache } from 'apollo-cache-inmemory'
    import { HttpLink } from 'apollo-link-http'
    import { withClientState } from 'apollo-link-state'
    
    const cache = new InMemoryCache()
    const stateLink = withClientState({
      cache,
      resolvers,
      defaults,
    })
    const client = new ApolloClient({
      cache,
      link: ApolloLink.from([stateLink, new HttpLink()]),
    })
    
    默认值
    传递给
    withClientState
    定义初始状态,而
    解析器
    对象定义仅用于客户端查询和转换的行为

    常量默认值={ 傅:{ __typename:'Foo', 酒吧:“酒吧”, } }

    然后,您可以使用
    @client
    指令识别应使用状态链接解决的突变和查询:

    mutation DoSomething($bar: String) {
      updateFoo(bar: $bar) @client
    }
    

    要获得更完整的解释和很好的示例。

    这似乎可行,但伙计们,这看起来太严厉了,只是为了满足我的需要。我很感激你的回答,也很感激你的深入研究。
    mutation DoSomething($bar: String) {
      updateFoo(bar: $bar) @client
    }