Да! В соответствии с таблицами стилей не самая лучшая идея создавать таблицы стилей во время каждого рендеринга из-за производительности и читабельности кода.
Есть лучший способ сделать это, используя нотации массива , что в основном означает, что вы можете передать массив объектов стиля
например, если бы у меня был компонент, у которого был задан цвет фона и цвет текста в объекте стилей, например:
import React, { Component } from 'react';
import { StyleSheet, Text, View } from 'react-native';
export default class SomeComponent extends Component{
render(){
return(
<View style={styles.root}>
<Text>{'Hi Everybody!'}</Text>
</View>
);
}
}
const styles = StyleSheet.create({
root: {
backgroundColor: '#000000',
height: 400,
width: 300,
color: 'white'
}
});
Вы можете настроить цвет фона (или любой другой стиль) следующим образом:
<View style={[styles.root, {backgroundColor: "yellow"}]}>
<Text>{'Hi Everybody!'}</Text>
</View>
В вашем случае вы можете передать значение реквизита следующим образом:
<View style={[styles.root, this.props.style]}>
<Text>{'Hi Everybody!'}</Text>
</View>
или переменная из объекта состояния, например, так:
<View style={[styles.root, this.state.style]}>
<Text>{'Hi Everybody!'}</Text>
</View>
Более поздние значения в массиве будут иметь приоритет, поэтому, если я добавлю еще один объект стиля, имеющий атрибут backgroundColor, будет применен последний backgroundColor;
Например, если я сделал это:
<View style={[styles.root, {backgroundColor: "yellow"}, {backgroundColor: "green"}]}>
<Text>{'Hi Everybody!'}</Text>
</View>
цвет фона будет зеленым.
Теперь вы можете написать свой код таким образом, чтобы стили, созданные с помощью StyleSheet.create({})
, содержали стандартные шаблоны, которые были постоянными и применялись к любой настройке, или только к стилям по умолчанию.
Надеюсь, это поможет.