私のアプリが起動すると、ListComponentというコンポーネントがロードされ、サーバーからすべてのアイテムリストが取得され、listViewとして表示されます。私は別のカテゴリのsideMenuを持っています。ユーザが1つのカテゴリを選択すると、ListNavigatorを介して別のUR1を使用してListComponentが再度呼び出されます。 ListComponent
では私のコードはReact native:コンポーネントがコード化された後にコードを実行する
class ListComponent extends Component {
constructor(props) {
super(props);
this.state = {
isLoading: true
}
}
componentDidMount() {
this.requestUrl(allItemsUrl)
}
componentWillUpdate(){
const params = this.props.navigation.state.params;
if(params.id == '1'){
this.requestUrl(urlCategory1);
}else if (params.id == '2'){
//.....
}
}
render() {
if (this.state.isLoading) {
return (
<View style={{flex: 1}}>
<ActivityIndicator style={styles.activity}/>
</View>
);
}
// show the list with the selected category data
componentWillUpdate()
のように見える新しいカテゴリがメニュー項目から選択されるたびに呼び出されます。問題は、componentWillUpdate
が呼び出されたときにデータが要求された後、レンダリングが再度呼び出されて新しいデータがレンダリングされた場合、componentWillUpdate
が再度呼び出され、無限ループが作成されるということです。しかしcomponentWillUpdate
の代わりに何を使うべきかを理解しておらず、カテゴリがstackNavigator
から選択されたときに1回だけ呼び出されるようにしました。
編集:
私はコメントで提案された解決策を適用すると、古いとnextPropsを比較することにより、無限ループを停止しました。また、componentWillUpdateをcomponentDidUpdateに変更しましたが、警告が表示されるようになりました。
警告:次のリリースでは、空のセクションヘッダーがレンダリングされます。あなたは空の セクションヘッダ
をレンダリングするために「enableEmptySections」フラグを使用することができます。このリリース であなたは問題が何であるかを知っていますか?
全体のライフサイクルがあります: https://reactjs.org/docs/react-component.html たぶんチェックhttps://reactjs.org/docs/react-component.html#componentdidupdate どうやらこれがありますネットワーク通話のための良い場所 –