Просто просмотр / чтение значения из кэша Apollo

Я пытаюсь выполнить то, что считаю простой задачей. У меня есть окно поиска, которое успешно использует client.writeQuery для добавления элемента в кеш. Это выглядит так:

client.writeQuery({
        query: gql`
            {
                searchQuery {
                    query
                }
            }
        `,
        data: {
            searchQuery: {
                query: event.target.value,
                __typename: 'searchQuery'
            }
        }
    });

Это работает как задумано, так как я могу использовать инструменты Apollo Chrome и видеть, как он устанавливается и обновляется в кеше по мере ввода текста. Это не то значение, которое мне нужно хранить в базе данных.

Все, что я хочу сделать, это прочитать его другим компонентом и использовать в запросе. Я просмотрел тонны документации и учебных пособий, но мне они не кажутся очень краткими или ясными. У меня есть другой компонент, который имеет компонент Query, который берет эту строку и использует ее для поиска. Я также знаю, что это работает правильно, потому что до того, как я использовал Apollo Link State, я просто использовал его в состоянии React.

Как я могу заставить этот компонент React наблюдать и использовать это значение кэша Apollo так же, как оно использовало состояние React? Последующий компонент выглядит так:

const MainSearchQuery = ({searchQuery}) => (
    <Query query={MAIN_QUERY} variables={{searchQuery}}>
        {({loading, error, data}) => {
            if (loading) return(
                <p>Finding something ...</p>
            );

            if (error) return (
                <p>Ah man! There was nothing to find.</p>
            );

            return (
                <MainSearchResults searchResults={data.ResultsBySubstring} />
            );
        }}
    </Query>
);

Компонент Query, который вызывает MAIN_QUERY, просто передает возвращенные данные компоненту, отвечающему за визуализацию результатов. Любая помощь будет принята с благодарностью, поскольку эта небольшая проблема, которую, как мне кажется, легко решить, замедлилась из-за того, что изучение Apollo/GraphQL остановилось. Благодарю.

1 ответ

В моем компоненте MainSearchQuery я переключил его на компонент класса ES6, и я смог использовать функцию compose из response-apollo и экспортировать компонент следующим образом:

export default compose(
    graphql(READ_SEARCHQUERY, {
        props: ({ data: {searchQuery}}) => ({
            searchQuery
        })
    })
)(MainSearchQuery)

А потом внутри моего

    const { searchQuery : { query } } = this.props;

И затем мой компонент Query принял переменные вроде:

variables={{searchQuery: query}}

И сейчас все хорошо.

Другие вопросы по тегам