Привет, я на момент инициализации приложения меняю реальный
apolloClient
на фиктивный, что бы вместо запросов на сервер отдавать фиктивные данные. Все работает правильно, но появилась проблема, в некоторых компонентах есть одна и та же переменная
metric
в которую присваиваются разные значения, (поменять название переменой в компонентах нельзя) вопрос в том как использовать эту переменную для разных компонентов сохраняя уникальность свойств?
Пример данных, которые приходят с сервера в разных запросах, для разных компонентов:
для одного компонента:
{metric: {id: 1, something: "meow"}}
Для другого:
{metric: {id: 2, entities: 50}}
И вот, я не могу создать две переменных
metric
либо объединить данные в одну переменную
metric
потому что данные в компонентах будут не корректны.
Место где отдаю свою мокапы
import {
metric
} from "./mockedData"
export const mocks = {
Query: () => ({
metric // здесь отдаю фиктивные данные в подменный apolloClient
})
}
место где я создаю фиктивный apolloClient (чисто для полноты картины)
import ApolloClient from "apollo-client"
import {
makeExecutableSchema,
addMockFunctionsToSchema,
} from "graphql-tools"
import { graphql, print } from "graphql"
import { InMemoryCache } from "apollo-cache-inmemory"
import { ApolloLink, Observable } from "apollo-link"
// simulate loading
function delay(ms) {
return new Promise((resolve) => {
setTimeout(() => {
resolve()
}, ms)
})
}
function createLink(schema, mocks) {
const delayMs = 1000
return new ApolloLink(operation => new Observable((observer) => {
const { query, operationName, variables } = operation
delay(delayMs)
.then(() => graphql(
schema,
print(query),
{},
{},
variables,
operationName
))
.then(() => {
// inject mocked data here
observer.next({ data: mocks.Query() })
observer.complete()
})
.catch(observer.error.bind(observer))
}))
}
export function createMockedClient({
typeDefs,
mocks,
}) {
const schema = makeExecutableSchema({ typeDefs })
const mockOptions = {
schema,
mocks,
}
addMockFunctionsToSchema(mockOptions)
const cache = new InMemoryCache()
return new ApolloClient({
cache,
link: ApolloLink.from([
createLink(schema, mocks),
]),
connectToDevTools: true,
})
}
Помогите пожалуйста =^.^=