如果使用react-router-relay,如何检测中继环境变化?

时间:2016-12-07 09:28:55

标签: relayjs react-router-relay

也许这是一个非常具体的问题,但我相信它会找到解决方案。我发现很多人在登录/退出后询问环境变化。

我使用redux存储有关登录,模态,表单等的应用程序状态逻辑,并继续进行数据获取。登录/注销后我使用连接的路由器触发新环境的重新渲染

const RelayApp = connect(_ => ({
  routes: routes,
  environment: environment,
  history: browserHistory,
  render: applyRouterMiddleware(useRelay)
}))(Router);

ReactDOM.render(
  <Provider store={store}>
    <RelayApp />
  </Provider>,
  document.getElementById('root')
);

我的路线定义如下:

export default (renderAppRoute) => (
  <Route render={renderAppRoute} path="/" component={App} queries={AppQueries} >
    <IndexRoute component={UserList} queries={UserListQueries}/>
    <Route path=":username" component={User} queries={UserQueries} />
  </Route>
);

renderAppRoute函数定义了在不同的中继状态下呈现的内容,例如,如果正在获取

const renderAppRoute = ({ done, props, element }) => {
  if(props) { //it's loaded
    React.cloneElement(element, props);
  }
  return <h1>Loading...</h1>;
};

在我更改环境后,我收到错误(index):7 Uncaught TypeError: Cannot read property 'user' of undefined(…)。这是因为在初始提取时,道具未定义且正在进行提取。在使用props完成提取之后,您可以找到RelayContainer等的片段定义。但是在切换到新环境之后,props永远不会被定义,因此它正在渲染我的组件但是没有存储中的数据。有可能以某种方式检测或有某种方法来确定环境是否是新的,还是我们需要在用户端创建一些自定义逻辑?

我目前使用新变量isNewEnvironment制作它,当我创建新环境时我将其设置为true,而renderAppRouteparams.done设置为{{1}后设置为false }}

0 个答案:

没有答案