1
我正在使用子上下文技術將上下文傳遞給應用程序的子節點。React-router:無法傳遞上下文
童上下文成功傳遞到頭組件,但不是在遭遇元器件。 任何想法來解決這個問題。 謝謝。
應用:
export default class Application extends React.Component {
constructor(props, context){
super(props);
this._onDataReceived=this._onDataReceived.bind(this);
}
componentDidMount() {
PersonalStore._onDataReceived(this._onDataReceived);
}
componentWillUnmount() {
PersonalStore._offDataReceived(this._onDataReceived);
}
getChildContext() {
return { name:"Moussawi7" };
}
renderRouter(){
ReactDOM.render((
<Router>
<Route path="/" component={Encounter} />
<Route path="inbox">
<IndexRoute component={Inbox} onEnter={()=>this.refreshScroller()}/>
<Route path=":userID" component={Conversation} />
</Route>
<Route path="*" component={NotFound} />
</Router>
),document.getElementById('content'));
}
render() {
return (
<div className="container">
<Header/>
<div id="content"></div>
</div>
);
}
_onDataReceived() {
this.renderRouter();
}
}
Application.childContextTypes={
name: React.PropTypes.string.isRequired
}
頁眉:
export default class Header extends React.Component {
constructor(props,context) {
super(props,context);
console.log(context);// Object{name:"Moussawi7"}
}
}
Header.contextTypes= {
name: React.PropTypes.string.isRequired
}
遭遇:
export default class Encounter extends React.Component {
constructor(props,context) {
super(props,context);
console.log(context);// Object {name:undefined}
}
}
Encounter.contextTypes= {
name: React.PropTypes.string.isRequired
}
爲什麼不直接在渲染方法中渲染路由器而不是在'componentDidMount'中單獨渲染? –
@Morhaus,我的代碼比這個例子複雜得多,所以我一旦收到數據就開始路由。下面的答案解決了這個問題。謝謝。 – Moussawi7
@ Morhaus,根據「componentDidMount」我已經更新了代碼。 – Moussawi7