当前位置: 首页 > wzjs >正文

做水果网站需要些什么广州seo外包

做水果网站需要些什么,广州seo外包,网站代理制作,做导航网站用多大的空间React Native 动态切换主题 创建主题配置和上下文创建主题化高阶组件主应用组件主屏幕组件(类组件形式) 创建主题配置和上下文 // ThemeContext.jsimport React, { Component, createContext } from react;import { Appearance, AsyncStorage } from rea…

React Native 动态切换主题

  • 创建主题配置和上下文
  • 创建主题化高阶组件
  • 主应用组件
  • 主屏幕组件(类组件形式)

创建主题配置和上下文

				// ThemeContext.jsimport React, { Component, createContext } from 'react';import { Appearance, AsyncStorage } from 'react-native';// 主题配置const themes = {light: {mode: 'light',primary: '#3498db',secondary: '#f39c12',background: '#ffffff',cardBackground: '#f8f9fa',text: '#333333',textSecondary: '#666666',border: '#e0e0e0',},dark: {mode: 'dark',primary: '#2ecc71',secondary: '#e74c3c',background: '#121212',cardBackground: '#1e1e1e',text: '#ffffff',textSecondary: '#bbbbbb',border: '#333333',},blue: {mode: 'blue',primary: '#2980b9',secondary: '#3498db',background: '#ecf0f1',cardBackground: '#bdc3c7',text: '#2c3e50',textSecondary: '#7f8c8d',border: '#95a5a6',}};export const ThemeContext = createContext();export class ThemeProvider extends Component {state = {theme: themes.light // 默认主题};async componentDidMount() {// 尝试加载保存的主题try {const savedTheme = await AsyncStorage.getItem('userTheme');if (savedTheme && themes[savedTheme]) {this.setState({ theme: themes[savedTheme] });} else {// 没有保存的主题则使用系统主题const systemTheme = Appearance.getColorScheme() === 'dark' ? themes.dark : themes.light;this.setState({ theme: systemTheme });}} catch (error) {console.error('加载主题失败:', error);}// 监听系统主题变化this.appearanceListener = Appearance.addChangeListener(({ colorScheme }) => {if (!this.state.userSelectedTheme) { // 如果用户没有手动选择主题this.setState({theme: colorScheme === 'dark' ? themes.dark : themes.light});}});}componentWillUnmount() {if (this.appearanceListener) {this.appearanceListener.remove();}}toggleTheme = () => {const newTheme = this.state.theme.mode === 'light' ? themes.dark : themes.light;this.setTheme(newTheme.mode);};setTheme = async (themeName) => {if (themes[themeName]) {this.setState({ theme: themes[themeName],userSelectedTheme: true });try {await AsyncStorage.setItem('userTheme', themeName);} catch (error) {console.error('保存主题失败:', error);}}};render() {return (<ThemeContext.Providervalue={{theme: this.state.theme,toggleTheme: this.toggleTheme,setTheme: this.setTheme,themes: Object.keys(themes) // 所有可用主题列表}}>{this.props.children}</ThemeContext.Provider>);}}

创建主题化高阶组件

// withTheme.js
import React from 'react';
import { ThemeContext } from './ThemeContext';export function withTheme(Component) {return function ThemedComponent(props) {return (<ThemeContext.Consumer>{context => <Component {...props} {...context} />}</ThemeContext.Consumer>);};
}

主应用组件

// App.js
import React from 'react';
import { ThemeProvider } from './ThemeContext';
import MainScreen from './MainScreen';export default class App extends React.Component {render() {return (<ThemeProvider><MainScreen /></ThemeProvider>);}
}

主屏幕组件(类组件形式)

// MainScreen.js
import React from 'react';
import { View, Text, StyleSheet, TouchableOpacity } from 'react-native';
import { withTheme } from './withTheme';class MainScreen extends React.Component {render() {const { theme, toggleTheme, setTheme, themes } = this.props;return (<View style={[styles.container, { backgroundColor: theme.background }]}><Text style={[styles.title, { color: theme.text }]}>当前主题: {theme.mode}</Text><TouchableOpacity style={[styles.button, { backgroundColor: theme.primary }]}onPress={toggleTheme}><Text style={styles.buttonText}>切换主题</Text></TouchableOpacity><View style={styles.themeOptions}>{themes.map(themeName => (<TouchableOpacity key={themeName}style={[styles.themeButton, { backgroundColor: themes[themeName].primary,marginBottom: 10}]}onPress={() => setTheme(themeName)}><Text style={styles.buttonText}>{themeName}</Text></TouchableOpacity>))}</View><View style={[styles.card, { backgroundColor: theme.cardBackground }]}><Text style={{ color: theme.text }}>这是一个卡片示例</Text><Text style={{ color: theme.textSecondary }}>次要文本颜色</Text><View style={[styles.divider, { backgroundColor: theme.border }]} /><Text style={{ color: theme.text }}>边框颜色示例</Text></View></View>);}
}const styles = StyleSheet.create({container: {flex: 1,justifyContent: 'center',alignItems: 'center',padding: 20,},title: {fontSize: 24,marginBottom: 30,fontWeight: 'bold',},button: {padding: 15,borderRadius: 8,marginBottom: 20,width: 200,alignItems: 'center',},themeButton: {padding: 12,borderRadius: 6,marginHorizontal: 5,width: 100,alignItems: 'center',},buttonText: {color: 'white',fontWeight: 'bold',},themeOptions: {flexDirection: 'row',flexWrap: 'wrap',justifyContent: 'center',marginTop: 20,marginBottom: 30,},card: {width: '90%',padding: 20,borderRadius: 10,marginTop: 20,},divider: {height: 1,width: '100%',marginVertical: 15,}
});export default withTheme(MainScreen);
http://www.dtcms.com/wzjs/188719.html

相关文章:

  • 大学做视频网站设计什么叫网络营销
  • 有微信公众号怎么做微网站块链友情链接平台
  • 广州做网站厉害的公司关键词百度网盘
  • 网站的开发费用吗近三天新闻50字左右
  • 昆明网站建设系统互联网营销专业
  • 商昊网站建设上海seo优化公司kinglink
  • wordpress 拿站怎么创建网站?
  • 昆山网站建设有限公司怎么样网站搜索查询
  • 如何建导航网站今日疫情实时数据
  • 泰州网站设计企业网站推广方法
  • 湖南昌华建设集团网站自学seo能找到工作吗
  • 淄博哪里有做网站的软文代写接单平台
  • seo排名优化有哪些seo免费诊断联系方式
  • 有专门为个人网站做推广的吗seo优化易下拉霸屏
  • 服装网站怎么做的企业邮箱域名
  • 松江注册公司seo sem论坛
  • 深圳中高端网站建设青岛网
  • 百度搜不到网站宁波seo咨询
  • 秦皇岛的网站建设公司厦门seo顾问
  • 郑州 高端网站建设百度贴吧网页版登录入口
  • 学习电子商务网站建设与管理的感想阿里云域名注册官网
  • 织梦网站上传路径不对站长工具综合查询官网
  • 网站建设费用摊销年限网站关键词怎么写
  • 青岛微网站制作国内新闻最新
  • 唐山网站主页制作苏州疫情最新情况
  • 有没有单纯做旅游攻略的网站域名历史查询工具
  • 淘宝联盟怎么建网站怎么在百度上投放广告
  • 用oracle做网站数据库资源优化排名网站
  • 网站制作 意向单广告宣传语
  • 辽宁省住房和建设厅网站免费职业技能培训网站