📜  react native 组件中的样式有哪些不同的方式?(1)

📅  最后修改于: 2023-12-03 15:19:43.998000             🧑  作者: Mango

React Native组件样式

React Native提供了多种设置组件样式的方式,包括内联样式和外部样式表等,下面将分别介绍这些方式。

内联样式

内联样式是指将样式直接写在组件标签的style属性中,这种方式适用于仅需要在一个组件中使用的样式。样式的书写方式和CSS类似,但是有一些不同之处,如下所示:

  • 样式属性名称采用驼峰式写法,比如backgroundColor。
  • 属性值必须使用字符串类型,即使是数字类型的属性值。
  • 如果要同时设置多个属性,属性之间必须使用分号分隔。
  • 如果要设置多个属性值相同的属性,可以使用数组语法,比如padding: [10, 20, 10, 20]。

下面是一个使用内联样式的例子:

import React from 'react';
import {View, Text} from 'react-native';

const MyComponent = () => {
  return (
    <View style={{backgroundColor: 'red', padding: 10}}>
      <Text style={{color: 'white', fontSize: 20}}>Hello World!</Text>
    </View>
  );
};

export default MyComponent;
外部样式表

外部样式表是指将样式写在一个独立的JavaScript文件中,然后在组件中引用该文件中的样式。这种方式适用于需要在多个组件中使用的样式。外部样式表的书写方式和CSS类似,如下所示:

import {StyleSheet} from 'react-native';

export default StyleSheet.create({
  container: {
    backgroundColor: 'red',
    padding: 10,
  },
  text: {
    color: 'white',
    fontSize: 20,
  },
});

在上面的示例中,使用了StyleSheet.create方法创建了一个样式表,并定义了两个样式:container和text。然后在组件中引用这个样式表:

import React from 'react';
import {View, Text} from 'react-native';
import styles from './styles';

const MyComponent = () => {
  return (
    <View style={styles.container}>
      <Text style={styles.text}>Hello World!</Text>
    </View>
  );
};

export default MyComponent;
全局样式

全局样式是一种可以在整个应用程序中使用的样式,它们可以用于设置文本字体、大小等通用属性。在React Native中,可以通过在App.js文件中设置全局样式,如下所示:

import React from 'react';
import {StyleSheet, Text, View} from 'react-native';

const App = () => {
  return (
    <View style={styles.container}>
      <Text style={styles.text}>Hello World!</Text>
    </View>
  );
};

const styles = StyleSheet.create({
  container: {
    flex: 1,
    alignItems: 'center',
    justifyContent: 'center',
    backgroundColor: '#F5FCFF',
  },
  text: {
    fontSize: 16,
    color: 'red',
  },
});

export default App;

在上面的示例中,我们定义了一个名为styles的全局样式对象,并在组件中使用了其中的两个样式:container和text。

主题样式

React Native还提供了主题样式的概念,即可以为不同主题定义不同的样式。在React Native中,可以通过包装组件的方式来实现主题样式。首先,我们需要定义两个主题,如下所示:

const themes = {
  light: {
    backgroundColor: '#F5F5F5',
    color: '#333333',
  },
  dark: {
    backgroundColor: '#333333',
    color: '#F5F5F5',
  },
};

然后,我们可以编写一个名为withTheme的高阶组件,这个高阶组件接收一个组件作为参数,并返回一个新的组件,这个新的组件可以接收一个名为theme的属性,用于指定当前主题。withTheme组件的实现如下所示:

import React from 'react';
import {View} from 'react-native';

const withTheme = (Component) => (props) => {
  const theme = themes[props.theme || 'light'];
  return (
    <View style={{backgroundColor: theme.backgroundColor}}>
      <Component {...props} theme={theme} />
    </View>
  );
};

export default withTheme;

最后,我们可以编写一个TestComponent组件,这个组件可以接收一个名为theme的属性,并使用这个属性来指定当前主题。这个组件的实现如下所示:

import React from 'react';
import {Text} from 'react-native';
import withTheme from './withTheme';

const TestComponent = ({theme}) => {
  return <Text style={{color: theme.color}}>Hello World!</Text>;
};

export default withTheme(TestComponent);

最终,我们可以在其他组件中使用TestComponent组件,并通过设置其theme属性来实现主题样式的切换:

<TestComponent theme="light" />
<TestComponent theme="dark" />

以上就是React Native中组件样式的几种不同方式。可以根据实际需求选择合适的方式来设置组件样式。