一次客户端开发总结【reactnative】

2017-11-04  本文已影响32人  猪猪9527
客户端开发算是告一段落,做个总结,总结经验,以便更好的开发商家端

导航

导航结构纠结来纠结去的,最终采用的是 react-navigation 确实很强大,强大到令你窒息,支持iOS的stack,还有tabbar,结构,各种跳转,重置,router and so on。具体自己查,这里不展开了

1509852302497.jpg

大致来说 Tab结构有四个组件

看代码

const Tab =TabNavigator(
    {
        Home:{
            screen:Home
        },
        WaterStationList:{
            screen:WaterStationList
        },
        ShoppingCart:{
            screen:ShoppingCart
        },
        Me:{
            screen:Me
    });

这是底层最基本的组件。这里使用了TabNavigator组件,

全局结构

然后呢?其他界面咋办?那就要用到 react-navigation家族的另外一个组件了,StackNavigator比如首页,点击商品,或者水票。这里简写一下,看代码,秒懂。

const App = StackNavigator(
    {
        Root: {screen: Tab},
        ProductDetail:{screen: ProductDetail}
        TicketList:{screen: TicketList}
        .....
    },

Mobx vs Redux

这次采用了mobx的状态容器管理,对于两者 的对比,这里不展开介绍,只点拨下实现原理。

数据

与后台交互

先吐槽一下,我希望的后台返回的数据结构,这个结构不能变,我前端能很方便的从底层全局处理一些展示,

response:{
  retCode:200/xxx
  status:'success/fail'
  message:'xxxxxx',
  data:{
    xxxxx
    oooo
 }
}

,然鹅现在返回的狗屎数据我也就将就将了。

React

购物车

WechatIMG206.jpeg

目前的购物车主要逻辑由后台完成,前端主要展示数据以及简单的加减商品操作,基于店铺维度的支付,建立如下模型

import {observer} from 'mobx-react/native'
import {observable, action, computed, observe} from 'mobx'

class ProductItem{
    @observable _selectCount = 0;

    constructor(item){
        this._selectCount = item.selectCount ;
    }

    @action increase(){
        this._selectCount++ ;
    }

    @action decrease(){
        this._selectCount-- ;
    }

    @computed get selectCount(){
        return this._selectCount ;
    }
}

class Shop{
    @observable _productItemList = [] ;
    constructor(shop){
        this._productItemList = shop.list.map(item=>{
            return new ProductItem(item);
        })
    }

    @computed get productItemList(){
        return this._productItemList ;
    }
}

class ShoppingCartStore{

    @observable _shoplist = [] ;

    constructor(){
        this.refreshShoppingCart();
    }

    @action
    refreshShoppingCart(){
        let result = shoplist ;  //模拟网络请求
        this._shoplist = result.map(shop=>{
            return new Shop(shop);
        })
    }

    @computed get shopList(){
        return this._shoplist ;
    }
}

用户角色

性能优化

global.LOG = (...args) => {
    console.log('**********************');
    console.log(...args);
    console.log('**********************');
    return args[args.length - 1];
};

等正式发布的时候

global.LOG = (...args) => {};

2:项目中能用色值就不用图片,减少安装包的大小。
3:慎用setState,因其容易导致重新渲染
4:方法的bind一律置于constructor
5:只传递component需要的props
6:尽量使用const element,
7: 组件尽量细化,尽量实现局部渲染
8:list优化。。。。待完善

上一篇 下一篇

猜你喜欢

热点阅读