React Native 项目总结

列出实际项目开发中的经验、技巧,还有曾经年少无知时一起挖过的坑...
欢迎大家来吐槽,推荐开发经验技巧。
后续不断更新...

目录(原谅简书中无法使用的目录跳转吧)

  1. Exp1:节省时间之测试模式
  2. Exp2:继承的实际应用

Exp1:节省时间之测试模式

时间就是金钱
实际项目开发中,我们需要一整套的开发测试模式,便于我们开发,开发模式/发布模式仅需要一个开关来控制,快捷高效。犹如之前做游戏一样,LOCAL_MODE开启就变成单机游戏,关闭就成为网络游戏。

下面是我实际开发中的一部分

// 全局的配置表
var GlobalConfig = {
    DEV_MODE: false,              // true开发模式 false发布模式

    SANDBOX_MODE: false,           // 沙盒模式
    
    TEST_MODE: true,               // 测试模式,仅在【开发模式】下有效
    TEST_VIEW: 'views.TestView',   // 直接跳转的测试界面
    TEST_VIEW_PARAMS: {            // 测试界面的传入参数【手动模拟】
        id: 100,
    }
};

// 发布模式下强制关闭【沙盒模式】
GlobalConfig.SANDBOX_MODE = GlobalConfig.DEV_MODE ? GlobalConfig.SANDBOX_MODE : false

// 发布模式下强制关闭【测试模式】
GlobalConfig.TEST_MODE = GlobalConfig.DEV_MODE ? GlobalConfig.TEST_MODE : false

DEBUG_MODE 开发/发布

用来标志是开发模式还是发布模式的开关

SANDBOX_MODE 沙盒模式

实际项目中需要模拟填充一些数据。而这些数据在正式发布或者特定测试时又不需要。
例如:注册流程,需要注册手机号、账号、密码、姓名、身份证、住址等信息,这时候就可以用到沙盒模式了

需求:

  • 每次填写注册信息麻烦,我们需要快速的测试整个注册流程
  • 在【开发模式】下,我们有时候也需要手动填充一些数据测试,这时候需要关闭【沙盒模式】
  • 测试数据保留,方便我们下次再次使用
  • 测试数据在【发布模式】时要关掉,不能影响上线产品的数据

实际项目中,注册账号中使用到的沙盒模式

this.state = {
    account: '',
    pwd: '',
    pwdex: '',
};

if (config.SANDBOX_MODE) {
    this.state.account = utils.sandboxAccount()
    this.state.pwd = utils.sandboxPwd()
    this.state.pwdex = this.state.pwd
}

TEST_MODE 快速测试模式

直接跳转到我们需要的界面,快速测试数据,而不需要每次都走通整个流程才到测试界面

TEST_MODE: true, // 测试模式,仅在【开发模式】下有效 
TEST_VIEW: 'views.TestView', // 直接跳转的测试界面 
TEST_VIEW_PARAMS: { // 测试界面的传入参数【手动模拟】 
    id: 100,
 }

Exp2:继承的实际应用

实际开发中,会遇到多种界面,非常类似,如我们开发中的,通过电话号码查询、通过邮件查询、通过QQ号码查询,这些界面逻辑非常的相似,查询开始要转同样的菊花,查询结束要取消菊花,查询不到提示同样的信息等等。如果分开写,不仅逻辑复杂且不易维护,如果后期增加了N个同样的界面,维护成本就成倍的提升了。

解决方案:继承

和组件并不冲突,如都转菊花, 我们可以将菊花放到一个组件中统一维护,但是涉及到搜罗的逻辑,我们只能通过继承来实现。

基类

export default class SearchBase extends Component {
    constructor(props) {
        super(props);
    }

    componentWillMount() {
        this.onInit()
    }

    onInit() {           //overrite
        // 初始化函数
    }

    onSendMsgSucceed(data) {
        // do sth.. send msg succeed...
    }

    onSendMsgFailed() {             //overrite
        // do sth.. send msg failed...
    }

    onStartSearch(text) {           // overrite
        // 开始搜索
    }

    render() {
        return (
            <Text>test</Text>
        );
    }
}

派生类

export default class SearchPhone extends SearchBase {
   // 初始化函数
    onInit() {
        super.onInit()
        // SearchPhone init is here...
    }

    /**
     * overrite
     * 开始查询数据,派生类覆盖查询的消息
     * @param text
     */
    onStartSearch(text) {           // overrite
        let is_phone = utils.isPhone(text);
        if (isPhone) {
            ReqSearchInfoByPhone(text,
                (succ)=> {
                    let data = succ[0]
                    this.onSendMsgSucceed(data)
                }, (failed)=> {
                    this.onSendMsgFailed()
                }
            );
        }
    }
}

相同的逻辑,放到基类SearchBase中,需要覆盖的逻辑,重载基类中的函数并重新实现

注意:

  • 派生类中的constructor中必须实现super(props),因为es6的class,是先构造基类的this,然后是派生类才能使用this
  • 正常使用应该是
let com = new SearchPhone()
com.init()

这样能先调用基类的构造函数,然后是派生类的构造函数,因为组件的调用是RN来控制的, 我们无法加入一个init函数,好在实在构造函数之后,且在渲染之前,我们所有将此函数作为一个初始化函数触发点

componentWillMount() {
    this.onInit()
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容