Дополнение ответа graphql на клиенте - PullRequest
0 голосов
/ 27 сентября 2019

Скажем, я запрашиваю сторонний API о точности передачи числа Пи в качестве параметра

type Query {
  pi(precision: Int): Float
}

Обычный код реле:

const AppQuery = graphql`
  query AppQuery($precision: Int) {
    pi(precision: $precision)
  }
`;

const render = ({ props }) => {
  if (props) {
    /*
      Foock...
      There is no `precision` field in server response and I have no control over server.
      I need to add it locally.
      But how???
    */
    return <PiComponent pi={props.pi} precision={props.precision} />;
  }  
};

const App = () => {
  return (
    <QueryRenderer
      query={AppQuery}
      environment={environment}
      variables={{ precision: 3 }}
      render={render}
    />
  );
};

Проблема в том, как изящно передать precision опора для PiComponent компонента.Чтобы быть совместимым с ретранслятором, это должно быть сделано путем локального увеличения отклика сервера.Что-то в соответствии с локальными распознавателями или «виртуальными полями», как в Apollo.

# what I'm asking

query {
  pi(precision: 3)
}

# what I'm getting from server

{
  pi: 3.142
}

# what I want to get

{
  pi: 3.142,   // server field
  precision: 3 // local field
}

or

{
  pi: {
    value: 3.142, // server field
    precision: 3  // local field
  }  
}

Как я могу это сделать?

(ссылка на весь код: https://github.com/MatrixNorm/demos/tree/master/relay/src/problem_numero_one)

...