StyleSheet.create有什么意义

Ste*_* L. 48 react-native

我正在阅读React Native文档/教程,我想知道StyleSheet.create函数的重点是什么.

例如,本教程包含以下代码:

const styles = StyleSheet.create({
  bigblue: {
    color: 'blue',
    fontWeight: 'bold',
    fontSize: 30,
  },
  red: {
    color: 'red',
  },
});
Run Code Online (Sandbox Code Playgroud)

但我不明白它与之间的区别:

const styles = {
  bigblue: {
    color: 'blue',
    fontWeight: 'bold',
    fontSize: 30,
  },
  red: {
    color: 'red',
  },
};
Run Code Online (Sandbox Code Playgroud)

Aak*_*del 50

TL; DR随时可以使用StyleSheet.create().

Nico答案是正确的,但还有更多.

总结一下:

  1. 它验证了Nico提到的样式
  2. 文档中所述:

从样式对象制作样式表可以通过ID引用它,而不是每次都创建一个新的样式对象.

  1. 文档中还提到:

它还允许仅通过桥发送一次样式.所有后续用法都将引用id(尚未实现).

您可能知道,通过网桥发送数据是一项非常昂贵的操作,会对应用程序的性能产生重大影响.所以,使用StyleSheet.create()你减少桥上的压力.

  • 您是否注意到上面提到的文档中的"(尚未实现)"注释?它仍然存在于2017年4月的RN V0.43.我的解读是它不能节省桥梁流量.除非doco已经过时了.我仍然想知道在跳过StyleSheet.create()时是否确实存在任何_performance_缺点,并且只使用静态(非内联)样式...至少然后它们可以在传递给组件后进行检查和记录堆! (5认同)
  • `.create` 仍然只在开发中验证,不执行任何其他操作。在生产中它只返回对象。请参阅存储库中的源代码。 (3认同)

eth*_*eff 19

StyleSheet.create 不会再增加性能提升.

https://github.com/DefinitelyTyped/DefinitelyTyped/issues/29265#issuecomment-430783289

  • +1虽然这很有用,但您应该在答案中用几句话来解释原因.该链接可能会衰减,然后它只会成为一个没有上下文或证据的声明:-) (8认同)

Nic*_*ico 11

这里有create的源代码.

create<T: Object, U>(obj: T): {[key:$Keys<T>]: number} {
  var result: T = (({}: any): T);
  for (var key in obj) {
    StyleSheetValidation.validateStyle(key, obj);
    result[key] = ReactNativePropRegistry.register(obj[key]);
  }
  return result;
}
Run Code Online (Sandbox Code Playgroud)

我不是React的专家.我实际上从未使用它,但这是我的见解.它似乎create对您的密钥进行某种验证并将它们注册到React.

我认为你可以通过简单地不调用来跳过验证,create但我不确定究竟ReactNativePropRegistry.register是什么.

参考来源