概要: このチュートリアルでは、useColorScheme
フックを使用して、ユーザーが設定したカラースキームを取得する方法を学びます。
React Native useColorScheme フックの概要
useColorScheme
フックを使用すると、ユーザーが設定したカラースキームを取得できます。
まず、react-native ライブラリから useColorScheme
フックをインポートします。
import {useColorScheme} from 'react-native';
Code language: JavaScript (javascript)
次に、関数コンポーネントで useColorScheme
を使用して、ユーザーが設定したカラースキームを取得します。
const colorScheme = useColorScheme();
Code language: JavaScript (javascript)
useColorScheme()
フックは、現在のカラースキームを示す文字列または null を返します。次の 3 つの値のいずれかになります。
'light'
: 明るいカラースキーム。'dark'
: 暗いカラースキーム。null
: ユーザーがカラースキームを選択していません。
次の例は、useColorScheme
フックを使用して、ダークテーマとライトテーマを切り替える方法を示しています。
import {useState} from 'react';
import { Text, SafeAreaView, StyleSheet, Switch, useColorScheme } from 'react-native';
export default function App() {
const colorScheme = useColorScheme();
const [isDarkMode, setIsDarkMode] = useState(colorScheme === 'dark');
const theme = isDarkMode ? styles.darkTheme : styles.lightTheme;
return (
<SafeAreaView style={[styles.container, theme.background]}>
<Text style={[styles.text, theme.text]}>JavaScriptTutorial.Net</Text>
<Switch
trackColor={{ false: "#767577", true: "#81b0ff" }}
thumbColor={isDarkMode ? "#f5dd4b" : "#f4f3f4"}
ios_backgroundColor="#3e3e3e"
onValueChange={() => setIsDarkMode(!isDarkMode)}
value={isDarkMode}
/>
</SafeAreaView>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
},
text: {
fontSize: 20,
marginBottom: 20,
},
lightTheme: {
background: {
backgroundColor: '#fff',
},
text: {
color: '#000',
},
},
darkTheme: {
background: {
backgroundColor: '#000',
},
text: {
color: '#fff',
},
},
});
Code language: JavaScript (javascript)
出力
仕組み
まず、App コンポーネント内で useColorTheme
フックを呼び出します。
const colorScheme = useColorScheme();
Code language: JavaScript (javascript)
次に、現在のテーマがダークかどうかを示す値を格納する状態変数を作成します。デフォルトはユーザーが設定したテーマです。
const [isDarkMode, setIsDarkMode] = useState(colorScheme === 'dark');
Code language: JavaScript (javascript)
3 番目に、isDarkMode
状態の値に基づいて、テーマ変数にスタイルプロパティ(ダークテーマまたはライトテーマ)を割り当てます。
const theme = isDarkMode ? styles.darkTheme : styles.lightTheme;
Code language: JavaScript (javascript)
4 番目に、テーマがダークかライトかに基づいて、コンポーネントでテキストと背景のスタイルを使用します。さらに、ダークテーマとライトテーマを切り替えるための スイッチ コンポーネントを作成します。
<SafeAreaView style={[styles.container, theme.background]}>
<Text style={[styles.text, theme.text]}>JavaScript Tutorial</Text>
<Switch
trackColor={{ false: "#767577", true: "#81b0ff" }}
thumbColor={isDarkMode ? "#f5dd4b" : "#f4f3f4"}
ios_backgroundColor="#3e3e3e"
onValueChange={() => setIsDarkMode(!isDarkMode)}
value={isDarkMode}
/>
</SafeAreaView>
Code language: JavaScript (javascript)
最後に、ダークテーマとライトテーマのスタイルを定義します。
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
},
text: {
fontSize: 20,
marginBottom: 20,
},
lightTheme: {
background: {
backgroundColor: '#fff',
},
text: {
color: '#000',
},
},
darkTheme: {
background: {
backgroundColor: '#000',
},
text: {
color: '#fff',
},
},
});
Code language: JavaScript (javascript)
まとめ
- React Native の
useColorScheme
フックを使用して、ユーザーが設定したカラースキームを取得します。
このチュートリアルは役に立ちましたか?