Как Аполлон достаточно умен, чтобы знать, когда нужно объединяться, но не добавлять?

Итак, у меня есть форма в моем приложении React Apollo, которая либо добавляет, либо обновляет пользователя. При получении данных, если пользователь существует, Apollo знает об этом и правильно объединяет / нормализует данные.

Если это не так, он ничего не делает, и мне нужно вручную добавить его так:

        const result = await this.props.upsertPersonMutation({
            variables: {
                ...this.state.fields,
            },
            update: (store, { data }) => {
                // somewhere in here I'll need to check if it's new or not
                const initDataQuery = store.readQuery({query: INIT_DATA});
                const { upsertPersonMutation } = data;

                initDataQuery.getInitData.user.people.push(upsertPersonMutation)
                store.writeQuery({query: INIT_DATA, data: initDataQuery})
            }
        }).then(response => {
            this.setState({
                isLoading: false
            });

            this.props.closeCallback();
        })

Хотя я впечатлен, что он может делать первое, почему он не может добавлять новые записи в массив? Я чувствую, что, возможно, это побеждает цель, если решает только половину проблемы, понимаете?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
1
0
1 430
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это происходит потому, что после выполнения мутации клиент apollo проверяет, есть ли в кэше apollo какой-либо элемент с таким же ключом идентификатора. Если есть, он обновляется автоматически. Аполлон называет эти обновления Автоматические обновления кеша.

Если в кеше нет ничего, что соответствует результату мутации, клиент apollo не добавит его. Мутации используются явно для изменения объектов и запросов для их извлечения. Использование функции update - это способ добавить ее через мутацию.

По умолчанию ключ идентификатора - <__typename>:<id>, <__typename>:<_id> или путь, по которому был осуществлен доступ к объекту. Прочтите эту ссылку, чтобы узнать больше о как Apollo нормализует кеш.

Фантастический ответ, Педро. Большое спасибо за это

MitchEff 26.07.2018 14:39

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