В чем именно преимущество использования StyleSheet.create()
простого объекта?
const styles = StyleSheet.create({
container: {
flex: 1
}
}
Vs.
const styles = {
container: {
flex: 1
}
}
react-native
Корасан
источник
источник
Ответы:
Цитата непосредственно из раздела комментариев StyleSheet.js в React native
Также StyleSheet проверяет содержимое вашей таблицы стилей. Таким образом, любая ошибка неправильного свойства стиля отображается во время компиляции, а не во время выполнения, когда таблица стилей фактически реализована.
источник
StyleSheet.create({styles...})
лучше / быстрее чем{styles...}
. Код такой же чистый, и вы также используете именование вместо встраивания. Кто-нибудь может пролить свет на это?StyleSheet
обеспечивает проверку при компиляцииStyleSheet.create
и простым объектом, а не встроенным иНет никакой пользы. Период.
Миф 1:
StyleSheet
более производительныйНет абсолютно никакой разницы в производительности между
StyleSheet
объектом, объявленным внеrender
(это было бы иначе, если бы выrender
каждый раз создавали новый объект внутри ). Разница в производительности - это миф.Возникновение мифа, вероятно, связано с тем, что команда React Native пыталась это сделать, но безуспешно. В официальных документах вы не найдете ничего о производительности: https://facebook.github.io/react-native/docs/stylesheet.html , а в исходном коде указано «еще не реализовано»: https://github.com/ facebook / react-native / blob / master / Libraries / StyleSheet / StyleSheet.js # L207
Миф 2:
StyleSheet
проверяет объект стиля во время компиляцииЭто неправда. Обычный JavaScript не может проверять объекты во время компиляции.
Две вещи:
источник
StyleSheet.create( {x:{flex: "1"}} )
не удастся во время выполнения, как и проверка машинописного текста во время компиляции.Принятый ответ не является ответом на вопрос OP.
Вопрос не в разнице между встроенными стилями и
const
внешними стилями, а в том, почему мы должны использоватьStyleSheet.create
вместо простого объекта.После небольшого исследования я обнаружил следующее (пожалуйста, обновите, если у вас есть какая-либо информация). Преимущества
StyleSheet.create
должны быть следующими:источник
Раньше считали , что с помощью STYLESHEET был более производительным, и был рекомендован по этой причине по RN команды вплоть до версии 0.57, но она теперь уже не рекомендуется , так как правильно указал в другой ответ на этот вопрос.
Документация RN теперь рекомендует StyleSheet по следующим причинам, хотя я думаю, что эти причины в равной степени применимы к простым объектам, которые создаются вне функции рендеринга:
Итак, каковы, на мой взгляд , возможные преимущества использования StyleSheet по сравнению с простыми объектами?
1) Несмотря на утверждения об обратном, мое тестирование на RN v0.59.10 показывает, что вы действительно получаете некоторую проверку при вызове,
StyleSheet.create()
и машинописный текст (и, вероятно, поток) также будет сообщать об ошибках во время компиляции. Я думаю, что даже без проверки времени компиляции все еще полезно выполнять проверку стилей во время выполнения перед они будут использоваться для рендеринга, особенно когда компоненты, использующие эти стили, могут быть условно визуализированы. Это позволит выявить такие ошибки без необходимости тестирования всех сценариев рендеринга.2) Учитывая , что StyleSheet будет рекомендован командой RN , они могут по- прежнему есть надежда , используя таблицу стилей для повышения производительности в будущем, и они могут иметь другие возможные улучшения в виде , как хорошо, например:
3) Текущая
StyleSheet.create()
проверка времени выполнения полезна, но немного ограничена. Кажется, что это ограничено проверкой типа, которую вы получите с потоком или машинописным текстом, поэтому подберет, скажем,flex: "1"
илиborderStyle: "rubbish"
, но неwidth: "rubbish"
так, как это может быть процентная строка. Возможно, что команда RN может улучшить такую проверку в будущем, проверяя такие вещи, как процентные строки или пределы диапазона, или вы могли бы обернутьStyleSheet.create()
свою собственную функцию, чтобы выполнить эту более обширную проверку.4) Используя StyleSheet, вы, возможно, упрощаете переход на сторонние альтернативы / расширения, такие как react-native-extended-stylesheet, которые предлагают больше.
источник
Создание ваших стилей с помощью
StyleSheet.create
пройдет проверку, только если для глобальной переменной__DEV__
установлено значение true (или при работе внутри эмуляторов Android или IOS см. Переменные React Native DEV и PROD )Исходный код функции довольно прост:
Я бы рекомендовал использовать его, потому что он выполняет проверку во время выполнения во время разработки, а также замораживает объект.
источник
Я не обнаружил никаких различий между
StyleSheet
объектом и простым объектом, кроме проверки ввода в TypeScript.Например, это (обратите внимание на различия в типе):
равно этому:
источник