请阅读完整的问题,因为了解这种行为可能会有所帮助。
我有一个分段的ListView,其中包含一系列任务。列表视图有三个部分(Recent,Later和Past)。每个任务都可以有一个用户列表,在完成任务时应该通知他们。当任务标记为已完成时,任务将移至Past
部分。当一项任务被标记为已完成时,会发生以下事情
当任务标记为已完成时,将更新redux存储,触发重新呈现ListView
。第二步发生在根据日志重新呈现ListView
之后。
发生的事情是,第二步是使用不同任务的道具触发而不是标记为已完成的任务。就好像ListView
项被重用一样,之前用于标记为完成的任务的ListView
项目现在被重用于其他项目,其余的代码使用道具运行那个非常奇怪的任务。下面是它在代码中的外观
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))
}
我将尝试创建一个展示此问题的示例项目。如果您有关于此行为的任何信息,请发表回答或评论。
答案 0 :(得分:0)
您应该将数据绑定到ListView
,例如关注
<ListView
...
renderRow={this.renderList.bind(this)}
/>
因此,在更新列表之后,您需要将ID
传递给函数changeTaskStatus
并更新ListView。
此外,您还可以创建ID
的单独对象,并通过自定义逻辑