J'ai:
JobScreen
handleSetView(mode, e) {
this.setState({
view: mode
});
console.log(this.state.view)
}
render() {
return (
<div className="jobs-screen">
<div className="col-xs-12 col-sm-10 job-list"><JobList view={this.state.view} /></div>
<div className="col-xs-12 col-sm-2 panel-container">
<div className="right-panel pull-right"><RightPanel handleSetView={this.handleSetView} /></div>
...
)
}
RightPanel
render() {
return (
<div>
<div className="controls">
<span className="title">Views <img src="images\ajax-loader-bar.gif" width="24" id="loader" className={this.state.loading ? "pull-right fadeIn" : "pull-right fadeOut"}/></span>
<button onClick={this.props.handleSetView.bind(this, 'expanded')}><img src="/images/icons/32px/libreoffice.png" /></button>
<button onClick={this.props.handleSetView.bind(this, 'condensed')}><img src="/images/icons/32px/stack.png" /></button>
</div>
...
)}
Liste d'emplois
render() {
var jobs = [];
this.state.jobs.forEach((job) => {
jobs.Push(
<Job key={job.id} job={job} view={this.props.view} loading={this.state.loading} toggleTraderModal={this.props.toggleTraderModal} toggleOFTModal={this.props.toggleOFTModal}/>
);
});
return (
<div>
{jobs}
</div>
);
};
Le problème est que le changement d'état d'affichage ne rend aucun élément enfant.
Comment puis-je faire en sorte que cela fonctionne?
Je ne sais pas si c'est le cœur de votre problème, mais:
handleSetView={this.handleSetView}
est faux, car comment js lie cela. Utilisation:
handleSetView={this.handleSetView.bind(this)}
au lieu.
Aussi,
this.setState({
view: mode
});
console.log(this.state.view)
semble étrange; Notez que this.state
n'est pas modifié juste après avoir appelé setState
, cela peut prendre un certain temps pendant que React distribue l'opération setState
planifiée. Mettez cette console.log
en rendu pour voir quand il est réellement appelé.
Enfin, assurez-vous que vos composants n'implémentent pas la méthode de cycle de vie shouldComponentUpdate
(vous ne le faites probablement pas explicitement, mais si votre composant étend une classe autre que React.Component, cela peut se produire)
this
est dans le contexte du composant react, donc passez la référence de this
à votre fonction handleSetView
ou liez this
comme mentionné par @Tomas