反应原生ListView中的奇怪错误

时间:2017-08-10 04:54:10

标签: react-native redux react-native-listview

请阅读完整的问题,因为了解这种行为可能会有所帮助。

我有一个分段的Lis​​tView,其中包含一系列任务。列表视图有三个部分(Recent,Later和Past)。每个任务都可以有一个用户列表,在完成任务时应该通知他们。当任务标记为已完成时,任务将移至Past部分。当一项任务被标记为已完成时,会发生以下事情

  1. 将任务标记为在redux商店中完成
  2. 如果任务有参与者,则向参与者发送远程通知
  3. 当任务标记为已完成时,将更新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))
      }
    

    我将尝试创建一个展示此问题的示例项目。如果您有关于此行为的任何信息,请发表回答或评论。

1 个答案:

答案 0 :(得分:0)

您应该将数据绑定到ListView,例如关注

<ListView ... renderRow={this.renderList.bind(this)} />

因此,在更新列表之后,您需要将ID传递给函数changeTaskStatus并更新ListView。

此外,您还可以创建ID的单独对象,并通过自定义逻辑

进行管理