不变违规:一个 VirtualizedList 包含一个单元格,该单元格本身包含多个 VirtualizedList

Posted

技术标签:

【中文标题】不变违规:一个 VirtualizedList 包含一个单元格,该单元格本身包含多个 VirtualizedList【英文标题】:Invariant Violation: A VirtualizedList contains a cell which itself contains more than one VirtualizedList 【发布时间】:2018-08-08 13:38:28 【问题描述】:

完整的错误是:

Invariant Violation:一个 VirtualizedList 包含一个自身的单元格 包含多个相同方向的 VirtualizedList 父列表。您必须将唯一的 listKey 属性传递给每个兄弟列表。

我的每个FlatList 组件都有一个keyExtractor 属性。 react-native-elements 组件中的 List 中的每个项目都有一个 key 属性。

有人能解释一下这个问题的含义吗?

【问题讨论】:

【参考方案1】:

正如错误所说“您必须将唯一的 listKey 道具传递给每个兄弟列表。”类似 listKey="someUniqueString" 到 FlatList 的道具为我修复了这个错误

【讨论】:

我已经尝试过了,但它仍然给我同样的错误。你能提供一些其他的解决方案吗【参考方案2】:

使用嵌套平面列表时出现此错误。我使用 listKey 而不是 keyExtractor。

**listKey=(item, index) => 'D' + index.toString()**

【讨论】:

【参考方案3】:

如果您使用 FaltList 作为任何其他 FlatList 或 SectionList 的嵌套列表,那么您必须将唯一值传递给此道具 列表键

listKey=this._keyExtractor

_keyExtractor = (item, index) => 
return this.props.index+"_"+index+'_'+item.id+"_"+moment().valueOf().toString(); 

【讨论】:

【参考方案4】:

我收到了这个错误。但使用唯一字符串修复了

listKey=moment().valueOf().toString()

【讨论】:

【参考方案5】:

FlatList 中使用ListKeykeyExtractor 属性来防止出现此错误或警告

例子:

  listKey=(item, index) => `_key$index.toString()`
  keyExtractor=(item, index) => `_key$index.toString()`

【讨论】:

以上是关于不变违规:一个 VirtualizedList 包含一个单元格,该单元格本身包含多个 VirtualizedList的主要内容,如果未能解决你的问题,请参考以下文章

JestJS -> 不变违规:在“连接(投资组合)”的上下文或道具中找不到“商店”

不变违规:不变违规:尝试从未标记为“本机”的节点获取本机标记 - 反应导航更新导致崩溃

带有整数查询参数的 RelayJS 不变违规

不变违规:new NativeEventEmitter() 需要一个非空参数

不变违规:组件`div`的视图配置getter回调必须是一个函数(收到`undefined`)

反应错误 - 未捕获的不变违规:元素类型无效