私は反応コンポーネントを持っています。これはサーバーへのクエリを実行し、結果リストを表示することを意図しています。反応コンポーネントDOM親をアンマウント/リセットせずに変更
いくつかの変数に応じてdomのレイアウトを変更したいと思います。私の問題は、レイアウトを変更すると、コンポーネントがリセットされ、クエリがもう一度実行されることです。私はそれをリセットせずにDOM内のこのコンポーネントを移動することができますので、表示された結果はクエリを再実行することなく同じままです。この場合
、Iは(this.mainSNL()
がrender()
とthis.linkTabs()
機能の両方で呼ばれる)は、それが直接又はthis.linkTabs()
の一部として表示されている場合、それをリセットせずに同じ成分を返すようにthis.mainSNL()
したい:
render()
{
return (
<div>
{this.userInputElement()}
<div className="main_display_area">
{
this.state.linkingNote != undefined ?
this.linkTabs()
:
this.mainSNL()
}
</div>
</div>
)
}
mainSNL()
{
return (
<StreamedNoteList
ref={(streamedList) => { this.mainSNLElement = streamedList; } }
/* long list of props*/
/>
)
}
linkTabs()
{
if(this.state.linkingNote == undefined)
return null;
return (
<div>
<ul id='note_display_tabs' className="nav nav-tabs" role="tablist">
<li role="presentation" className="active">
<a href="#search_note_tab" aria-controls="search_note_tab" role="tab" data-toggle="tab">Create Link</a>
</li>
<li role="presentation" >
<a href="#view_links_tab" aria-controls="view_links_tab" role="tab" data-toggle="tab">View Links</a>
</li>
</ul>
<div className="link_tabs tab-content">
<div role="tabpanel" className="tab-pane fade in active" id="search_note_tab">{this.mainSNL()}</div>
<div role="tabpanel" className="tab-pane fade" id="view_links_tab">{this.viewLinksSNL()}</div>
</div>
</div>
)
}
ない理由あなたは 'componentWillMount'または' componentDidMount'に対してクエリの読み込みを行いますか?これは一度だけ実行されます。 – Kousha
実際には、コンポーネントがマウントされているときだけでなく、 'searchQuery'の小道具が変更されるたびにクエリを実行します。それでも、このsearchQueryの値は、divの "root"で生成されたか、 'linkTabs()'関数の内部で生成されたとしても同じです。 私は最後の 'searchQuery'が何だったかをチェックし、同じであればクエリを再度実行せず、以前の結果を単に表示する安全性があります。しかし、コンポーネントがリセットされているように見えるだけでなく、クエリが再度実行されるだけでなく、以前のクエリ(保存する必要がある)の結果さえも消えます。 –
とにかく 'componentDidMount'を試しましたが、親を変更するたびに再実行されます。 –