美文网首页我爱编程ReactNative
初识ReactNative及个别实用组件

初识ReactNative及个别实用组件

作者: WindFlyCloud | 来源:发表于2018-04-10 15:21 被阅读0次

    简述

    我是在17年10月份开始接触ReactNative的,当时是听同事说这个语言的开发效率很高,兼容性还不错,恰好公司不是很忙,自己就抽空开始学习React。到目前为止用ReactNative开发了两个项目,感觉ReactNative在开发时确实很实用,就写篇文章,把自己的一些心得和搜集的资料分享一下。每一个程序员都要有开源分享精神 :-D

    网站

    React Native 中文网 https://reactnative.cn/
    ECMAScript 6 入门 http://es6.ruanyifeng.com/
    React 教程 http://www.runoob.com/react/react-tutorial.html
    npm https://www.npmjs.com/
    React/React Native 的ES5 ES6写法对照表 http://bbs.reactnative.cn/topic/15/react-react-native-%E7%9A%84es5-es6%E5%86%99%E6%B3%95%E5%AF%B9%E7%85%A7%E8%A1%A8

    第三方库(这些库都可以在GitHub或者npm上搜索到)

    "react-native-md5": "^1.0.0",//用于md5加密
    "react-native-sqlite-storage": "^3.3.4",//数据库操作
    "react-native-storage": "^0.2.2",//本地存储
    "jwt-decode": "^2.2.0",//解析jsonwebtoken
    "xmldom": "^0.1.27"//处理xml文本
    react-native-loading-view //加载遮罩loading
    react-native-easy-toast //提示文字视图
    npm i react-native-swiper --save //轮播图

    console.log的封装

    export default class Logger{
        //是否开启日志,true开启,false关闭
        static isDebugger=true;
        static log(obj){
            if(this.isDebugger){
                console.log(obj);
            }
        }
    
        static warn(obj){
            if(this.isDebugger){
                console.warn(obj);
            }
        }
    }
    

    使用方法 Logger.log(obj); Logger.warn(obj);

    观察者(广播)组件 可以多个页面同时监听同一事件

    /**
     * 全局的监听对象(多线程 高并发的时候可能会有问题 未处理并发情景)
     * 可以多个页面同时监听同一事件
     * componentWillUnmount时或者不需要监听时进行反注册  不执行该步骤否则将导致内存泄漏
     *
     */
    
    class Observer {
        constructor() {
            this.observers = new Map();
        }
        /**
         * 获取注册监听对象的实例
         * @returns {*}
         */
        static getInstance() {
            if (global.observerInstance == undefined) {
                global.observerInstance = new Observer();
            }
            return global.observerInstance;
        }
    
        /**
         * 注册观察
         * @param key 观察对象类型的可以值(使用字符串表示),不同的key表示监听不同事件  多个地方可以监听同一事件
         * @param callback
         */
        register(key, callback) {
            let observers = global.observerInstance.observers;
            if (observers.has(key)) {
                let listeners = observers.get(key);
                if (!listeners.includes(callback)) {
                    listeners.push(callback);
                }
            } else {
                observers.set(key, [callback]);
            }
        }
    
        /**
         * 通知
         * @param key 观察对象类型的可以值(使用字符串表示 使用注册时传入的值)
         * @param parameters 通知时传递的参数
         */
        notify(key, parameters) {
            let observers = global.observerInstance.observers;
            if (observers.has(key)) {
                let listeners = observers.get(key);
                for (callback of listeners) {
                    callback(parameters);
                }
            }
        }
    
        /**
         *  componentWillUnmount时或者不需要监听时进行反注册  不执行该步骤否则将导致内存泄漏
         * @param key 观察对象类型的可以值(使用字符串表示 使用注册时传入的值)
         * @param callback 传入注册时传入的回调对象
         */
        unRegister(key, callback) {
            let observers = global.observerInstance.observers;
            if (observers.has(key)) {
                let listeners = observers.get(key);
                let index = listeners.indexOf(callback);
                if (index != -1) {
                    listeners.splice(index, 1);
                }
            }
        }
    }
    
    /**
     * Observer通知对象类型定义
     */
    class ObserverConstant {
        static type = {
            loginSuccess: "loginSuccess",//监听登录成功的key
        }
    }
    
    module.exports={Observer,ObserverConstant}
    

    观察者(广播)组件的使用

        componentDidMount(){
            //注册监听当登录后,重新请求 刷新用户的信息
            Observer.getInstance().register(ObserverConstant.type.loginSuccess,this.requestUserInfoData);
        }
        componentWillUnmount(){
            //移除监听
            Observer.getInstance().unRegister(ObserverConstant.type.loginSuccess,this.requestUserInfoData);
        }
        requestUserInfoData = ()=>{
            Logger.log('请求用户信息');
        }
    

    发广播

    //登录成功发送通知
    Observer.getInstance().notify(ObserverConstant.type.loginSuccess);
    

    相关文章

      网友评论

        本文标题:初识ReactNative及个别实用组件

        本文链接:https://www.haomeiwen.com/subject/ocvghftx.html