componentDidMount()
メソッドでfetch(url, ...)
のReact Nativeでデータを取得します。componentDidMountでデータを取得中に警告が発生しました。「マウントまたはマウントされたコンポーネントのみを更新できます」
だから私のクラスでは、私がredux
とredux-persist
を使用して起動するまで、それがうまく働いていたすべての
class Posts extends Component {
state = {
posts: []
};
componentDidMount() {
fetch('https://...').then(res => res.json()).then(res => {
this.setState({ posts: res.posts });
}
}
render() {
return <FlatList data={this.state.posts} ... />;
}
}
ようになります。
今すぐ警告が表示されます。Warning: Can only update a mounted or mounting component. ...
componentDidMount
で呼び出された場合にマウントする必要があるため、なぜこのようなことが起こっているのか分かりません。
componentWillUnmount
でフェッチを中止する必要があるのか、実際にデータを一時的に 'ローカルコンポーネント'に格納するのではなく、reduxストアに実際にフェッチする必要があるのだろうかと思います。他のほとんどのアプリを開くと、アプリを開いたときにデータが既に読み込まれているように見えます。これは非常に高速なデータ検索やデータを永続的なストアに保存しているためですか?
私はif (this.isMounted) { .. }
をcomponentDidMount
の内部で使用するいくつかのプロジェクトを見てきましたが、この方法のライフサイクルを理解しているので、この時点でコンポーネントが常にマウントされていました。また、isMounted
は推奨されていません。
私は間違っていますか?この問題はアプリを起動したときにのみ発生するため、別のルートに移動してからこのルートに戻ると問題はありません。
ありがとう!できます!しかし、このアプローチは私にはちょっと変わったようです。代わりにreduxでデータを取得するのは意味がありますか? – Jamgreen
私はreduxで働いていますが、私はそれをしますが、それは常に意味をなさないと思います。はい、reduxはマウント(接続のため)の心配を解消しますが、キャッシュを解除するかどうかによって、データをメモリから消去する必要があります。 このデータを混乱の少ない状態で取得し、グローバル状態(常に適合しない)に保つことを約束しない別の方法があります。私のお気に入りは「再構成」です。 –
なぜこの方法が最善の方法ではないかという考えのための食べ物:https://reactjs.org/blog/2015/12/16/ismounted-antipattern.html – Martin