この動作を知ることが役に立つかもしれないので、完全な質問を読んでください。反応ネイティブの奇妙なバグリストビュー
私は、タスクのリストを含むセクション化されたListViewを持っています。リストビューには3つのセクション(最近、後、過去)があります。各タスクには、タスクが完了したときに通知されるべきユーザーのリストを含めることができます。完了としてマークされている場合、タスクはPast
セクションに移動されます。行われるようにタスクがマークされている場合は、物事は場所を取るの下
- マークタスクReduxのストア
- に行ったように、タスクが参加者を持っている場合は、参加者にリモート通知を送信
ときタスクは完了とマークされ、reduxストアは更新され、ListView
の再レンダリングをトリガします。 2番目の手順は、ListView
がログに従って再レンダリングされた後に行われます。
何が起こっているかは、2番目のステップが、別のタスクの小道具でトリガーされ、完了とマークされたタスクではトリガーされないということです。あたかもListView
のアイテムが再利用されたかのようであり、doneとマークされたタスクのために以前に使用されたアイテムは、他のアイテムに再利用され、残りのコードは非常に奇妙な他のタスクのために使用されます。以下はコードの外観です。
changeTaskStatus =() => {
this.props.dispatch(ActionCreators.markTaskDone(this.props.id))
// A re-render is triggered once the above action is dispatched and the
// this.props.id in the next step is not the one that the user marked as done
this.props.dispatch(ActionCreators.notifyParticipants(this.props.id))
}
この問題が発生するサンプルプロジェクトを作成しようとします。この動作に関する情報がある場合は、回答またはコメントを投稿してください。更新リストの後に、あなたが機能changeTaskStatus
と更新リストビューににID
を渡す必要があるときに
<ListView ... renderRow={this.renderList.bind(this)} />
に従うよう
ことによってそれを管理することができますはい、私はそれについて少し知っているだろう、常に(リストビュー内の最後の意味での)最後のタスクの小道具でトリガそれを確認してください。 –
私は、すべての 'props 'をオブジェクトに格納し、そのオブジェクトを使ってデータにアクセスする必要があると思います。これは非常に直感的ではなく、JavaScriptのクロージャの動作を壊すものです。 –