Модифицировать массив объектов в кеше Apollo - PullRequest
0 голосов
/ 29 ноября 2018

Я использую React с клиентом Apollo.

Моя общая цель - использовать кэш Apollo в качестве "глобального состояния или хранилища", в котором я могу запрашивать данные о продукте из любого места в моем приложении.

Я запускаю запрос, чтобы перенести данные о моем продукте в приложение с сервера, и Apollo автоматически сохраняет эти данные в кеше.Это здорово, но я бы хотел добавить пару значений к каждому из этих кэшированных продуктов, теперь, когда они на стороне клиента.Таким образом, когда я сделаю запрос к своим продуктам @client, я смогу получить доступ к этим новым значениям и для этих объектов продукта.

Я прочитал большую часть документации Apollo по мутациям, распознавателям и кешу, но все жене совсем понимаюЛюбая помощь будет принята с благодарностью!

Вот песочница с кодом, показывающая упрощенную модель моей проблемы: https://codesandbox.io/s/61k1988wrr

А вот для сохранения постоянной записи вот как выглядит мое упрощенное приложение:

Index.js

import React from "react";
import ReactDOM from "react-dom";
import { ApolloProvider, Query } from "react-apollo";
import gql from "graphql-tag";
import Client from "./Client";


const Root = () => {
  return (
    <ApolloProvider client={Client}>
      <Query query={PRODUCTS_QUERY}>
        {({ loading, data }) => {
          if (loading) return <div>Loading</div>;
          const { products } = data;

          return products.map(product => {
            // I want to include this salePrice value with each product in the Apollo cache
            // so that I can query it anywhere in my app. How can I do this?
            const salePrice = Math.round(product.price - product.price * 0.1);

            return (
              <div style={{ margin: "50px 20px" }} key={product.id}>
                <p>{`Product is: ${product.product}`}</p>
                <p>{`Price is: ${product.price}`}</p>
              </div>
            );
          });
        }}
      </Query>
    </ApolloProvider>
  );
};


const PRODUCTS_QUERY = gql`
  query allProducts {
    products {
      id
      product
      price
    }
  }
`;


ReactDOM.render(<Root />, document.getElementById("root"));

Client.js

import ApolloClient from 'apollo-boost';


const resolvers = {}


const Client = new ApolloClient({
  uri: 'https://api-useast.graphcms.com/v1/cjnddfnhj0g0q01glc9x9woh8/master',
  clientState: {
    defaults: {},
    resolvers
  }
});

export default Client;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...