Apollo Optimistic UI не работает в компоненте мутации? - PullRequest
0 голосов
/ 30 мая 2018

Я использую <Mutation /> компонент с API Render Prop и пытаюсь выполнить оптимистический ответ в пользовательском интерфейсе.

Пока у меня есть этот блок в функции _onSubmit -

createApp({
    variables: { id: uuid(), name, link },
    optimisticResponse: {
        __typename: "Mutation",
        createApp: {
            __typename: "App",
            id: negativeRandom(),
            name,
            link
        }
    }
});

И мой <Mutation /> компонент выглядит так -

<Mutation
    mutation={CREATE_APP}
    update={(cache, { data: { createApp } }) => {
        const data = cache.readQuery({ query: LIST_APPS });
        if (typeof createApp.id == "number") {
            data.listApps.items.push(createApp);
            cache.writeQuery({
                query: LIST_APPS,
                data
            });
        }
    }}
>

{/* 
some code here
*/}

</Mutation>

Я знаю, что функция update в <Mutation /> запускается дважды, один раз при запуске optimisticResponse и второй раз, когда ответ сервера возвращается.

В первый раз я даю им id как number.Оформить заказ createApp в optimisticResponse, где id: negativeRandom()

Вот почему моя update опора в <Mutation /> компоненте проверяет, является ли createApp.id значением number, затем вставляет его в массив.Это означает, что если данные возвращаются из локального хранилища, то помещают их в локальный кеш, а при возврате с сервера - не отправляют.

Но происходит то, что данные отображаются только при возврате с сервера.Функция update запускается дважды, но она не помещает ее в массив.

Я думаю, что может возникнуть 3 проблемы -

  1. Либо функция update не выполняетзапускается при нажатии локального состояния

  2. Я пытался сделать fetchPolicy равным cache-and-network & cache-first, но это тоже не сработало.

  3. __typename в optimisticResponse.ИДК, если Mutation - правильное значение, поэтому я тоже попытался AppConnection, но он все еще не работает.

Полный код можно найти здесь .Весь код существует в одном файле для простоты.Это очень простое приложение, которое имеет 2 входа и 1 кнопку отправки.Похоже -

dark mode list app

Note: Same thing works with React. Here's a link to React Repo - https://github.com/deadcoder0904/react-darkmodelist

1 Ответ

0 голосов
/ 02 июля 2018

Видимо, это была ошибка в пакете Apollo или React Apollo.Не знаю, какая ошибка была или это была только для React Native, но я только обновил свои зависимости и решил ее, не меняя код

Вы можете проверить полный код на https://github.com/deadcoder0904/react-native-darkmode-list

...