路由是这样的
<Router history={hashHistory}>
<Route path="/" component={App}>
<IndexRoute component={AppIndex} />
</Route>
</Router>
App
代码是这样的
const App = React.createClass({
getInitialState: function() {
return {id: null};
},
componentDidMount: function() {
$.get("api", function(data) {
if (this.isMounted()) this.setState(data);
}.bind(this));
},
render: function() {
// 这个是想了好久想到的通过App给AppIndex组件传递数据的方式
this.props.children.props.id = this.state.id;
console.log("render App");
return (
<div>
// ....
{this.props.children}
</div>
);
},
});
然后AppIndex
是这样的
const AppIndex = React.createClass({
render: function() {
console.log("render AppIndex");
console.log(this.props.id);
return <div>{this.props.id || "NULL"}</div>;
},
});
这样子运行之后,控制台的输出为
render App
render AppIndex
null
render App
页面中AppIndex
显示的是NULL
,除非点击AppIndex
的路由导致AppIndex
的render
才会正确显示id
属性。
到底这个App
和AppIndex
应该怎么样通信?或者如何在App
重新渲染的时候自动重新渲染AppIndex
哪怕路由没有改变?
id
传递至子组件props
中。