不变违规:一个 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
中使用ListKey
和keyExtractor
属性来防止出现此错误或警告
例子:
listKey=(item, index) => `_key$index.toString()`
keyExtractor=(item, index) => `_key$index.toString()`
【讨论】:
以上是关于不变违规:一个 VirtualizedList 包含一个单元格,该单元格本身包含多个 VirtualizedList的主要内容,如果未能解决你的问题,请参考以下文章
JestJS -> 不变违规:在“连接(投资组合)”的上下文或道具中找不到“商店”
不变违规:不变违规:尝试从未标记为“本机”的节点获取本机标记 - 反应导航更新导致崩溃
不变违规:new NativeEventEmitter() 需要一个非空参数