2017-08-10 8 views
0

この動作を知ることが役に立つかもしれないので、完全な質問を読んでください。反応ネイティブの奇妙なバグリストビュー

私は、タスクのリストを含むセクション化されたListViewを持っています。リストビューには3つのセクション(最近、後、過去)があります。各タスクには、タスクが完了したときに通知されるべきユーザーのリストを含めることができます。完了としてマークされている場合、タスクはPastセクションに移動されます。行われるようにタスクがマークされている場合は、物事は場所を取るの下

  1. マークタスクReduxのストア
  2. に行ったように、タスクが参加者を持っている場合は、参加者にリモート通知を送信

ときタスクは完了とマークされ、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)} />

に従うよう

+0

ことによってそれを管理することができますはい、私はそれについて少し知っているだろう、常に(リス​​トビュー内の最後の意味での)最後のタスクの小道具でトリガそれを確認してください。 –

+0

私は、すべての 'props 'をオブジェクトに格納し、そのオブジェクトを使ってデータにアクセスする必要があると思います。これは非常に直感的ではなく、JavaScriptのクロージャの動作を壊すものです。 –

答えて

0

あなたはListViewにデータをバインドする必要があります。

そしてまた、あなたはIDの別のオブジェクトを作成し、カスタム・ロジック

+0

私はあなたが何を提案しようとしているのか分かっていないと思います。 'renderRow'メソッドはすでに 'this'にバインドされています。 'changeTaskStatus'メソッドは、ユーザーがタスクをクリックしたときに呼び出され、タスクが完了したことをマークした結果としてタスクリストが再描画され、参加者に通知するために 'this'が呼び出し中に別のオブジェクトを指しています。 –

+0

私はあなたがthis.props.dispatch(ActionCreators.notifyParticipants(this.props.id))を呼んだときにthis.props.idを渡すと思います。ここでIDが間違っているかもしれないので、取得していなければここでチェックする必要がありますここで完璧なIDは私の解決策と一緒に行く –

+0

こんにちは@Nisarg、あなたは私が尋ねた質問とは関係がないので、私には役に立たないと答えました。 –

関連する問題