【发布时间】:2021-07-30 22:58:17
【问题描述】:
我正在尝试在我的 expo react-native 应用程序中实现主题(深色 | 浅色)。我一直在阅读他们的 documentation 在博览会页面上的深色和浅色主题,这在 App.js 中有效。但是,每当我声明一个组件并将其导入 App.js 时,它都不起作用。我的思考过程是尝试将当前主题“扩展”到我的组件。
这是 App.js 代码:
import { StatusBar } from 'expo-status-bar';
import React from 'react';
import { StyleSheet, Text, View, useColorScheme } from 'react-native';
//import firebase + config
import firebaseConfig from './config'
import firebase from 'firebase'
//initialize firebase application
if(!firebase.apps.length){
firebase.initializeApp(firebaseConfig)
} else{
firebase.app()
}
//import screens
import Overview from './screens/Overview'
export default function App() {
const colorScheme = useColorScheme();
const themeTextStyle = colorScheme === 'light' ? styles.lightThemeText : styles.darkThemeText;
const themeContainerStyle = colorScheme === 'light' ? styles.lightContainer : styles.darkContainer;
return (
<View style={[styles.container, themeContainerStyle]}>
<Overview />
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: 'center',
justifyContent: 'center',
},
lightContainer: {
backgroundColor: '#fff',
},
darkContainer: {
backgroundColor: '#101010',
},
lightThemeText: {
color: '#000000',
},
darkThemeText: {
color: '#ffffff',
},
});
这是我的简单组件:
import React from 'react'
import {View, Text, useColorScheme} from 'react-native'
export default class App extends React.Component{
render(){
return(
<View>
<Text>OverView</Text>
</View>
)
}
}
我要做的就是让 Overview 组件遵循主题规则,而不是需要声明已经在 App.js 中声明的样式。
现在它没有反映在代码中,但在发布这个问题之前我确实尝试了很多东西。
【问题讨论】:
-
嘿,不幸的是,ReactNative 并没有神奇地做到这一点,所以你需要在每次声明它们时定义组件样式。我个人更喜欢创建一些共享组件并在那里定义基本主题。您可以遵循“原子设计”原则来实现这一目标。
标签: ios react-native styles darkmode