Как вы переходите со стокового реле на реле с роутером?
У меня есть приложение React/Relay, которое в настоящее время работает, и я хотел бы добавить маршрутизацию к использованию response-router-relay. Когда я пробую минимально возможное преобразование, см. Приведенный ниже код, я получаю непонятную ошибку в журнале: "Uncaught Error: Invariant Violation: RelayQueryNode: Неверный конкретный узел".
import 'babel/polyfill';
import TodoApp from './components/TodoApp';
import { Router, Route } from 'react-router';
import ReactRouterRelay from 'react-router-relay';
import TodoAppHomeRoute from './routes/TodoAppHomeRoute';
/*
This section works perfectly
ReactDOM.render(
<Relay.RootContainer Component={TodoApp} route={new TodoAppHomeRoute()} />,
document.getElementById('root')
);
*/
//This breaks every time.
ReactDOM.render(
<Router
createElement={ReactRouterRelay.createElement}>
<Route
path="/"
component={TodoApp}
queries={new TodoAppHomeRoute().queries} // and the query
/>
</Router>,
document.getElementById('root')
);
Другой возможный способ сформулировать этот вопрос: каковы отличия между подходящими способами указать простые ванильные Relay's RelayRoutes.queries и реакции-router-relay для маршрутов?
3 ответа
Несколько других людей сообщили об этой проблеме здесь.
Похоже, добавление явного import
для каждого из Relay
а также React
в ваших компонентах может исправить это (я видел это только сейчас, и это исправило это для меня):
import React from 'react';
import Relay from 'react-relay';
Или, если не npm install --save react react-relay graphql graphql-relay react-dom
обновить ваши зависимости.
Если ответ Криса не сработал, @cpojer написал действительно потрясающие сообщения о маршрутах и ретрансляции здесь: https://medium.com/@cpojer/relay-and-routing-36b5439bad9
Я предполагаю, что new TodoAppHomeRoute().queries
это преступник Я догадываюсь, что это, вероятно, статическое свойство. Попробуй это TodoAppHomeRoute.queries
,
Если это не сработает, давайте посмотрим код в TodoAppHomeRoute