也许这是一个非常具体的问题,但我相信它会找到解决方案。我发现很多人在登录/退出后询问环境变化。
我使用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,而renderAppRoute
将params.done
设置为{{1}后设置为false }}