render()
でビューコンポーネントが呼び出された特定のプロジェクトをユーザーがクリックすると、プロジェクトのリストを表示するページがあります。子コンポーネントのsetState警告。警告:マウントされたコンポーネントまたはマウントされているコンポーネントのみを更新できます
親:
constructor(props) {
super(props);
this.state = {
showData : [],
view : false,
projectId: ''
};
this.buttonHandler = this.buttonHandler.bind(this);
this.back = this.back.bind(this);
};
// change view state to true to render diff component
buttonHandler(){
this.setState({view:true})
};
back(){
this.setState({view:true})
}
render(){
let compA = (
<Paper>
<List>
<Subheader >New
Projects</Subheader>
{this.state.showData.map(item =>
<div key={item.title}>
<ListItem onClick={()=>
this.buttonHandler()} leftAvatar=
{<Avatar icon={<Wallpaper />} />} primaryText=
"test" secondaryText="test" />
<Divider inset={true} />
</div>
)}
</List>
</Paper>
);
let compB = (
<ReviewProject
back={this.back}/>
);
return(
<div>
{this.state.view?compB:compA}
</div>
);
}
子コンプB:
constructor(props) {
super(props);
this.state = {
//some code
};
}
//calls function back from parent which sets state the "view" to false
dismiss() {
this.props.back();
};
がdismiss()
機能がリストコンポーネントcompA
をバックレンダリングする子で呼び出されると、警告が飛び出す:
Warning: setState(...): Can only update a mounted or mounting component. This usually means you called setState() on an unmounted component. This is a no-op. Please check the code for the compB component.
これを解決する方法はありますか?良い練習が前後に他の1つの構成要素からナビゲートするものです
はどのように消す関数を呼び出すか、そしてあなたが良いでしょう異なるコンポーネントを、レンダリングするために 'routes'を使用することができます場合は、バック機能 –
の定義を追加することができます。 – Panther
私はcompBでdismiss関数を呼び出し、compAのビューの状態をfalseに設定します。私は再編集しました – Pickles