web-dev-qa-db-ja.com

apollo-link-state cache.writedataの結果、フィールドがありませんという警告

クライアントでミューテーションを呼び出すと、次の警告が表示されます。

writeToStore.js:111 {}にフィールドupdateLocaleがありません

これは私のstateLinkです:

const stateLink = withClientState({
  cache,
  resolvers: {
    Mutation: {
      updateLocale: (root, { locale }, context) => {
        context.cache.writeData({
          data: {
            language: {
              __typename: 'Language',
              locale,
            },
          },
        });
      },
    },
  },
  defaults: {
    language: {
      __typename: 'Language',
      locale: 'nl',
    },
  },
});

そしてこれは私のコンポーネントです:

export default graphql(gql`
  mutation updateLocale($locale: String) {
    updateLocale(locale: $locale) @client
  }
`, {
    props: ({ mutate }) => ({
      updateLocale: locale => mutate({
        variables: { locale },
      }),
    }),
  })(LanguagePicker);

何が足りないのですか?

10
Rob Indesteege

同じ警告が表示され、ミューテーションメソッドからデータを返すことで解決しました。

updateLocale: (root, { locale }, context) => {

  const data = {
    language: {
      __typename: 'Language',
      locale,
    }
  };
  context.cache.writeData({ data });
  return data;
};
13
Kyle Schuma

現時点では、apollo-link-stateではanyの結果を返す必要があります。 nullにすることもできます。 これは将来変更される可能性があります

3
Robin Wieruch