0

我有一个当前正在运行的 React/Relay 应用程序,我想使用 react-router-relay 添加路由。当我尝试最小可能的转换时,请参阅下面的代码,我在日志中收到一个难以理解的错误:“未捕获的错误:不变违规: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')
);

表达这个问题的另一种可能的方法是:指定普通中继的 RelayRoutes.queries 和 react-router-relay 的路由查询的适当方法之间有什么区别?

4

3 回答 3

1

如果 Chris 的回答不起作用,@cpojer 在这里写了一篇关于路由和中继的非常棒的帖子:https ://medium.com/@cpojer/relay-and-routing-36b5439bad9

于 2015-09-28T22:26:48.837 回答
1

其他几个人在这里报告了这个问题。

看起来import为每个组件添加一个显式的RelayReact 在你的组件中可能会修复它(我刚刚看到这个并且它为我修复了它):

import React from 'react';
import Relay from 'react-relay';

或者失败了,npm install --save react react-relay graphql graphql-relay react-dom更新你的依赖项。

于 2015-09-29T08:11:18.023 回答
0

我猜这new TodoAppHomeRoute().queries就是罪犯。我的直觉是它可能是一个静态属性。试试这个TodoAppHomeRoute.queries

如果这不起作用,让我们看看代码TodoAppHomeRoute

于 2015-09-28T03:15:03.637 回答