【发布时间】:2018-06-21 01:35:13
【问题描述】:
想象一下:我有一个FlatList 显示消息线程列表。每个单元格都有一个标签,显示该线程中的新消息数量。每个单元格还显示该线程中最新消息的截断字符串。还介绍了其他东西。线程列表保存在redux 中,并设置为我的FlatList 的数据道具。线程的类实例不知道 FlatList 并且在某些变化时不能强制重新加载它,例如新消息进来(有意设计)。现在的问题是FlatList 在发生此类事件时不会更新。它仅在设置新线程数组(新实例)时更新。
当线程中的任何值发生更改时,如何让FlatList 更新?
定时重复加载不是首选。我正在考虑让线程更新(通过增加)redux 中的一个值,称为MessageThreadUpdateCount,这将是一个数字。每次任何 UI 连接值更改时都会这样做。然后FlatList 使用该redux 值作为其ExtraData 属性。因此,当它发生变化时更新。使用布尔值而不是数字会引发一个问题:什么应该将其设置为 false,以及何时设置?还有其他建议吗?
【问题讨论】:
-
与其想象您的代码,不如将minimal reproducible example 添加到您的问题中,以便人们对其进行调试。更新
FlatList的数据属性应该会触发重新渲染。 -
@bennygenel 不幸的是实际上没有。 FlatList 需要 extraData 属性来触发重新渲染。
-
@bennygenel 我没有不工作的错误/代码。这更像是一个代码工程问题。更新数组内容不会触发 UI 更新的问题已为人所知。而且我知道我必须使用 ExtraData,但更多关于如何使用,给定描述的设置..,.
-
有几种方法可以使用。你可以像你说的那样使用 extraData ,你可以将你的道具映射到 state 并使用 state 中的数据,或者你可以使用 shouldComponentUpdate 来决定重新渲染。这更多地取决于项目和开发人员的偏好。
-
@bennygenel 是有道理的。想知道是否有标准方法。似乎是间接的。
标签: user-interface react-native redux react-native-flatlist