反应原生android中VirtualViewManager和FlatViewManager之间的区别是什么

时间:2017-04-17 07:01:51

标签: react-native react-native-android

我正在尝试阅读本机android的代码。令我困惑的是VirtualViewManager和FlatViewManager之间的区别。据我所知,flatViewManager用于平面UI实现。但是,VirtualViewManager的傀儡是什么? VirtualViewManager和FlatViewManager彼此非常相似,有两个相似的ViewManager存在的原因是什么?

1 个答案:

答案 0 :(得分:3)

在React中,有一个虚拟布局节点的概念,它是一个不是Flexbox节点的React节点。它通常是非虚拟父母的孩子,帮助父母进行测量和布局。

最好的例子是RCTVirtualText,它包含样式信息,如字体大小,文本颜色等。

例如,检查以下React代码:

<Text color=green>
  He
  <Text size=11>ll</Text>
  o
</Text>

实际上会扩展到以下内容:

<RCTText color=green>
  <RCTRawText>He</RCTRawText>
  <RCTVirtualText size=11>
    <RCTRawText>ll</RCTRawText>
  </RCTVirtualText>
  <RCTRawText>o</RCTRawText>
</RCTText>

RCTVirtualText和RCTRawText是虚拟节点,它们无法测量,只存在于整个RCTText的一部分。

虚拟节点从不映射到Android视图(顶级RCTText可以映射到TextView,但内部虚拟节点不会映射到)。

回到ViewManagers,由于虚拟和非虚拟节点的行为不同,它们相应的ViewManagers的行为也不同,因此具有不同的类。例如,VirtualViewManager从createViewInstance()抛出异常,而FlatViewManager从同一方法返回一个新的FlatViewGroup()。

希望有所帮助。