最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 【React-native】react-native + react-navigation 实现更换皮肤完全教程

    正文概述 掘金(冯一朔)   2021-08-13   979

    先放具体的实现效果图:

    【React-native】react-native + react-navigation 实现更换皮肤完全教程

    【React-native】react-native + react-navigation 实现更换皮肤完全教程


    整体思路

    1. 在 App.js 中,添加一个全局变量 screenProps,把颜色变量放在其中,然后再添加监听,当颜色改变时,触发监听,修改 state 中的颜色值,达到颜色重新渲染。
    2. 在 router 配置文件中,配置颜色从 screenProps 中获取。
    3. 换肤页面调用替换颜色方法,触发监听。

    核心依赖版本

    "react-native": "0.60.5",
    "react-navigation": "^3.11.1"
    

    【React-native】react-native + react-navigation 实现更换皮肤完全教程


    具体实现

    一,入口文件中添加全局变量及监听

    /**
     * Created by supervons 2019/08/02
     *
     * App 入口文件
     * App entry file
     *
     * https://github.com/supervons/ExploreRN
     *
     * @format
     * @flow
     */
    
    import React, { Component } from 'react';
    
    // 导航路由表
    import RootStack from './src/routers/index';
    import { View, DeviceEventEmitter } from 'react-native';
    export default class App extends Component {
      constructor(props) {
        super(props);
        this.state = {
          color: '#f4511E'
        };
      }
    
      componentDidMount() {
        // 添加全局监听颜色变化
        DeviceEventEmitter.addListener('theme_change', params => {
          this.setState({
            color: params
          });
        });
      }
    
      render(): * {
        return (
              <View style={{ flex: 1 }}>
                <RootStack
                  screenProps={{
                    themeColor: this.state.color
                  }}
                />
              </View>
        );
      }
    }
    

    【React-native】react-native + react-navigation 实现更换皮肤完全教程

    这里讲下, 是路由配置,在下一步中会修改。

    二,修改 router 配置文件

    const Tabs = createMaterialTopTabNavigator(
      {
        MainPage: {
          screen: MainPage,
          navigationOptions: ({ navigation, screenProps }) => ({
            // 涉及到换肤的属性,改为 screenProps.themeColor
            ...
          })
        }
      })
    
    const Router = createStackNavigator(
      {
        Login: {
          // 登录界面
          screen: Login
        },
        MainPage: {
          screen: Tabs
        }
      },
      {
        // 定义配置
        initialRouteName: 'Login', //设置初始路由为登录界面
        headerMode: 'screen',
        defaultNavigationOptions: ({ navigation, screenProps }) => ({
          // screenProps 即可获取全局变量 themeColor
          headerStyle: {
            backgroundColor: screenProps.themeColor // <----- 看这里
          },
          headerTintColor: '#ffffff',
          headerTitleStyle: {
            fontWeight: 'bold'
          }
        })
      }
    );
    

    【React-native】react-native + react-navigation 实现更换皮肤完全教程

    三,在页面调用方法,触发监听

    DeviceEventEmitter.emit('theme_change', 'black');
    

    【React-native】react-native + react-navigation 实现更换皮肤完全教程

    是的,你没看错,一行代码就触发了换肤。

    当然,如果你想保留换肤,还需要存储到后台数据库,然后下次在用户进入 app 从后台拉取配置,就达到了永久换肤了。


    项目地址

    github.com/supervons/E…,欢迎关注 star~


    起源地下载网 » 【React-native】react-native + react-navigation 实现更换皮肤完全教程

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元