通常,我们认为像这样的顶级参数是路由上的参数。将它们视为流入 React 应用程序根目录的道具。
如果我想用新的道具重绘一个 React 应用程序,我只需用新的道具再次渲染它:
ReactDOM.render(<App countryCode="gb" />, …);
// …time passes; country changes
ReactDOM.render(<App countryCode="ca" />, …);
如果国家代码是一个Relay.Route
参数:
class CountryRoute extends Relay.Route {
static queries = {
country: () => Relay.QL`
query { country(alpha2: $countryCode) }
`,
};
static paramDefinitions = {
countryCode: {required: true},
};
static routeName = 'CountryRoute';
}
我可以做类似的事情:
ReactDOM.render(
<Relay.RootContainer
Component={CountryComponent}
route={new CountryRoute({countryCode: 'gb'})}
/>,
…
);
// …time passes; country changes
ReactDOM.render(
<Relay.RootContainer
Component={CountryComponent}
route={new CountryRoute({countryCode: 'ca'})}
/>,
…
);
至于如何以及何时使用新的路由参数重新渲染,您可以从您的 React 组件触发一个自定义事件,并带有一个相关的侦听器,导致ReactDOM.render
再次被调用,但是由于您使用的是react-router-relay
,您可能会考虑简单地更改国家代码在 URL 中并让它使用新countryCode
参数重新触发路由。
另请参阅:http: //facebook.github.io/relay/docs/guides-routes.html#routes-and-queries