Я использую дочерний метод контекста, чтобы передать контекст детям приложения.React-router: не удалось передать контекст
Контекст Ребенок успешно передается компонента заголовка, но не на Encounter Component. Любая идея для решения этой проблемы. Спасибо.
Применение:
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
}
Encounter:
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