Как использовать refetchQueries с reason-apollo? - PullRequest
0 голосов
/ 09 июня 2018

Я использую reason-apollo и у меня возникают проблемы при попытке установить refetchQueries.Моя установка очень похожа на пример свапи здесь .У меня есть список и форма для добавления нового элемента с помощью мутации.После того, как мутация прошла успешно, я хочу повторно получить элементы в списке.Мой код для создания нового элемента выглядит следующим образом (пропуская некоторый нерелевантный код пользовательского интерфейса):

module CreateFilm = [%graphql
  {|
  mutation createFilm($name: String!, $favourite: Boolean!, $rating: Int!, $ratedOn: DateTime!) {
      createFilm(name: $name, favourite: $favourite, rating: $rating, ratedOn: $ratedOn) {
          id
          favourite
          name
          rating
      }
  }
|}
];

module CreateFilmMutation = ReasonApollo.CreateMutation(CreateFilm);

type state = {
  favourite: bool,
  rating: int,
};

type action =
  | ToggleFavourite
  | UpdateRating(int);

let component = ReasonReact.reducerComponent("FilmNew");

let make = _children => {
  ...component,
  initialState: () => {favourite: true, rating: 5},
  reducer: action =>
    switch (action) {
    | ToggleFavourite => (
        state => ReasonReact.Update({...state, favourite: ! state.favourite})
      )
    | UpdateRating(newRating) => (
        state => ReasonReact.Update({...state, rating: newRating})
      )
    },
  render: ({state, send}) => {
    let now = Js.Date.make() |> Js.Date.toISOString |> Js.Json.string;
    let newFilm =
      CreateFilm.make(
        ~name="Temporary test",
        ~rating=state.rating,
        ~favourite=state.favourite,
        ~ratedOn=now,
        (),
      );
    <CreateFilmMutation>
      ...(
           (mutation, _result) =>
             <form
               onSubmit=(
                 event => {
                   ReactEventRe.Synthetic.preventDefault(event);
                   mutation(
                     ~refetchQueries=[|"allFilms"|],
                     ~variables=newFilm##variables,
                     (),
                   )
                   |> ignore;
                 }
               )>
               <input
                 className="toggle"
                 _type="checkbox"
                 checked=state.favourite
                 onChange=((_) => send(ToggleFavourite))
               />
               ("is favourite" |> ReasonReact.string)
               <input _type="submit" value="Submit" />
             </form>
         )
    </CreateFilmMutation>;
  },
};

Фильм успешно добавлен, и я вижу его в списке (который использует allFilmsзапрос), когда страница обновляется.Но refetchQueries, похоже, не имеет никакого эффекта.Мой бэкэнд использует graph.cool, аналогично примеру swapi в документации.Любая помощь приветствуется, спасибо!

1 Ответ

0 голосов
/ 13 июня 2018

Проблема была не в мутации, а в запросе, который я хотел повторить - в нем отсутствовало имя операции graphql ?‍♂️

...