react-native----mobx 数据更新未更新视图

mobx在react中是全局数据管理库,相当于vue中的vuex

当前使用的版本

react版本号

16.13.1
react-native版本号
0.63.3

mobx版本号

^6.0.4

mobx-react版本号

^7.0.5

使用步骤

  1. 安装依赖
    • mobx 核心库
    • mobx-react 方便在react中使用mobx技术的库
    • @babel/plugin-proposal-decorators
yarn add mobx mobx-react @babel/plugin-proposal-decorators
  1. 在babel.config.js添加一下配置
plugins:[
    ['@babel/plugin-proposal-decorators',{'legacy':true}]
]
  1. 新建文件mobx/index.js用来存放全局数据
//无需通过observable和action等修饰器,直接在构造函数中使用makeAutoObservable来实现observable和action修饰器功能,使代码更加简洁。
import {makeAutoObservable} from 'mobx';
class RootStore{
    constructor(){
      makeAutoObservable(this)
    }
    name='lee';
    changeName(name){
      this.name=name
     
    }
}
export default new RootStore()
  1. 在项目目录下index.js文件中挂载
    通过provider来挂载和传递
import { AppRegistry } from 'react-native';
import { name as appName } from './app.json';
import { Provider } from 'mobx-react';
import RootStore from './mobx/index';
import Com from './view/Com'

// 调试network请求的
global.XMLHttpRequest = GLOBAL.originalXMLHttpRequest || global.XMLHttpRequest
import React, { Component } from 'react'
export default class Index extends Component {
    render() {
        return (
            <Provider RootStore={RootStore}>
                <Com />
            </Provider>
        )
    }
}
AppRegistry.registerComponent(appName, () => Index);
  1. 在view/Com.js类组件中如何使用mobx
import React, { Component } from 'react'
import { Button, SafeAreaView, StatusBar, Text, View } from 'react-native'
import { inject, observer  } from 'mobx-react'

@inject('RootStore')
@observer
class Com extends Component {
    constructor(props) {
        super(props)
    }
    handChageName=()=>{
        this.props.RootStore.changeName('张三')
    }
    render() {
        let {name} =this.props.RootStore;
        console.log(name)
        return (
            <>
                <StatusBar barStyle='light-content'></StatusBar>
                <SafeAreaView style={{ backgroundColor: 'blue' }}>
                    <View style={{ height: '100%', backgroundColor: 'white' }}>
                        <Text onPress={this.handChageName} >修改</Text> 
                        <Text>{name}11</Text>
                    </View>
                </SafeAreaView>
            </>
        )
    }
}
export default Com

在view/Com.js函数组件中如何使用mobx

import { Button, SafeAreaView, StatusBar, Text, View } from 'react-native';
import {inject,observer} from 'mobx-react';
function Com(props) {
  let {name}=props.RootStore
  return (
    <View className="App">
     <Text>{name}</Text>
    </View>
  );
}

export default inject('RootStore')(observer(Com));

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。