ReactNative Mobx的簡(jiǎn)單實(shí)例

安裝mobx組件

npm install mobx mobx-react --save

安裝裝飾器

因?yàn)闀?huì)用到ES7的裝飾器(會(huì)適當(dāng)?shù)暮?jiǎn)化代碼),所以在此安裝一下

npm install babel-plugin-transform-decorators-legacy --save-dev

然后在.babelrc文件中配置,啟用一下這個(gè)插件

"plugins": ["transform-decorators-legacy"]

注意:transform-decorators-legacy 需放在首位,參考issue

實(shí)現(xiàn)

創(chuàng)建一個(gè)store文件,把所有store放里面,在根RootStore里,把其他store實(shí)例化

/**
 * Description:根store
 *
 * Author: zoe
 * Time: 2018/5/21 0016
 */
import { observable,action } from 'mobx'

class RootStore {
    constructor() {
        this.nameStore = new NameStore();
        this.ageStore = new AgeStore();
    }
}

class NameStore{

    //被觀察的字段
    @observable
    name = 'Zoey';

    //被觀察的操作
    @action
    setName(newName){
        this.name=newName;
    }
}

class AgeStore{

    @observable
    age = '18';

    @action
    setAge(newAge){
        this.age=newAge;
    }
}

export default new RootStore();

在根布局上,使用provider實(shí)現(xiàn)全局注冊(cè),rootStore為未來(lái)用到的地方inject的名字

import React, { PureComponent } from 'react';
import TestPage from "./app/TestPage";
import { Provider } from 'mobx-react'
import stores from './app/stores'

export default class App extends PureComponent {
    render() {
        return (
            <Provider rootStore={stores}>
                <TestPage/>
            </Provider>
        );
    }
}

在需要使用的地方,使用inject方法注入store,observer為觀察者

/**
 * Description:
 *
 * Author: zoe
 * Time: 2018/5/21 0017
 */
import React, { Component } from 'react';
import {
    Text,
    StyleSheet,
    View,
} from 'react-native';

import { observer, inject } from "mobx-react";

@inject('rootStore')
@observer
export default class TestPage extends Component {

    nameStore=this.props.rootStore.nameStore;
    ageStore=this.props.rootStore.ageStore;

    onChange() {
        this.nameStore.setName("Jack");
        this.ageStore.setAge("20");
    }

    render() {
        return (
            <View style={styles.container}>
                <Text>{'姓名:'+this.nameStore.name+'\n 年齡:'+this.ageStore.age}</Text>
                <Text style={styles.btn} onPress={() => this.onChange()}>點(diǎn)我換換</Text>
            </View>
        );
    }
}

const styles = StyleSheet.create({
    container : {
        flex : 1,
        justifyContent:'center',
        alignItems:'center',
        backgroundColor : 'white',
    },btn:{
        marginTop:20,
        fontSize:20,
        fontWeight :'200',
        color :'black'
    }
});
按鈕點(diǎn)擊前
按鈕點(diǎn)擊后

傳送門(mén)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 由于鄙人最近在做項(xiàng)目用到React做UI和Mobx做數(shù)據(jù)控制處理。所以我就記錄一下學(xué)習(xí)的東西。今天就分享一下...
    Salon_sai閱讀 1,652評(píng)論 0 3
  • react-native + mobx 入門(mén)到放棄 標(biāo)簽(空格分隔): react mobx Android 作為...
    swensun閱讀 5,708評(píng)論 3 14
  • 安裝: npm install mobx --save npm install mobx-react --save...
    林ze宏閱讀 1,322評(píng)論 0 2
  • 上一節(jié)我們已經(jīng)了解了為什么要使用Mobx,簡(jiǎn)單理解Mobx(一):使用目的 這節(jié)我們來(lái)看看如何引入并使用Mobx ...
    反復(fù)橫跳的龍?zhí)?/span>閱讀 3,762評(píng)論 11 17
  • 《博弈那些事兒》 文/六悅 人有擅長(zhǎng)的,也有不擅長(zhǎng)的,談及博弈,我是不擅長(zhǎng)的,不想謙虛,因?yàn)檫@事兒玩玩可...
    六悅茗閱讀 262評(píng)論 0 0

友情鏈接更多精彩內(nèi)容