很简单的mobx状态管理工具

mobx是一个状态管理系统,从mobx引入observable和action;

store页面的observable是定义数据的东西,action是执行者;类似于redux

在app页面需要引入import {Provider} from "mobx-react",利用Provider的机制来给子传值

home页面的observer是一个类似于监听者,类似于redux里面的reducers,inject引入的是store

  通过@inject(‘store’)引入store

     @observer来监听组件里面的变化

一、安装

1、init创建项目版本0.59.9

2、npm i [email protected] @[email protected] --save    (@babel/core版本为7.4.0)

3、配置装饰器yarn add  @babel/plugin-proposal-decorators --save

  然后需要在babel.config.js文件中添加如下代码

"plugins": [
    [
      "@babel/plugin-proposal-decorators",
      {
        "legacy": true
      }
    ]
  ]二、创建文件  src{  appstore/index.js  pages/home.js}三、文件中书写1、appstore.js中的书写
import {observable,action} from ‘mobx‘;let appStore = observable({    counter: 0,    str:"荆国瑞",    list:["as"]});appStore.addCount = action(()=>{    appStore.counter+=1;});appStore.subCount = action(()=>{    if(appStore.counter<=0){        return;    }    appStore.counter-=1;});appStore.changeCount = action((key)=>{    if(key<=0){        appStore.counter=0;    }    appStore.counter=parseInt(key);});appStore.changeStr = action((key)=>{    if(!key)return    appStore.str=key});

appStore.clickhand=action(()=>{    appStore.list.push(appStore.str)    appStore.str=""})export default appStore2、home文件中的书写  
import React, {Component} from ‘react‘;import { StyleSheet, Text, View,TouchableOpacity,TextInput,Button,Alert} from ‘react-native‘;import {observer, inject} from ‘mobx-react‘;

@inject(‘store‘)@observerexport default class Home extends Component{    constructor(props){        super(props);        this.state={            value:0,            str:"荆国瑞"        }    }    componentWillMount(){        console.log(this.props.store.counter)    }    sub=()=>{        let {store}=this.props;        store.subCount()    }    add=()=>{        let {store}=this.props;        store.addCount()    }    changehand=(e)=>{        let {store} = this.props        store.changeStr(e)    }    clickhand=()=>{        let {store} =this.props        store.clickhand()    }    render() {        let {store}=this.props        return (            <View style={styles.container}>                <TouchableOpacity onPress={this.sub}>                    <Text style={styles.txt}>-</Text>                </TouchableOpacity>                <TextInput style={{width:100,height:35,borderWidth:1}} value={store.counter.toString()}/>                <TouchableOpacity onPress={this.add}>                    <Text style={styles.txt}>+</Text>                </TouchableOpacity>                <TextInput value={store.str} style={styles.inp} onChangeText={this.changehand}/>                <Button title="添加" onPress={this.clickhand}/>                <View>                    {                        store.list.map((item)=>{                            return <Text>{item}</Text>                        })                    }                </View>            </View>        );    }}

最后写在app文件内就可以了
import React, {Component} from ‘react‘;import {Platform, StyleSheet, Text, View} from ‘react-native‘;import Home from "./src/pages/home"

import {Provider} from "mobx-react"import Appstore from "./src/store/appStore"

type Props = {};export default class App extends Component<Props> {  render() {    return (      <Provider store={Appstore}>        <Home/>      </Provider>    );  }}

最后:store的另一种写法:通过

observable 来定义数据内容,

action 来执行
class appStore{
    @observable counter = 0;
    @observable themeType = ‘light‘;
    @observable theme=themeData[‘light‘];
    @action changeTheme=(themeType)=>{
        this.themeType=themeType
        this.theme=themeData[themeType];
    }
}
export default new appStore();
 
 
 
 

原文地址:https://www.cnblogs.com/jingguorui/p/11511143.html

时间: 2024-10-09 16:38:13

很简单的mobx状态管理工具的相关文章

前端随心记---------简单.可扩展的状态管理工具MobX

Mobx是一个功能强大,上手非常容易的状态管理工具.就连redux的作者也曾经向大家推荐过它,在不少情况下你的确可以使用Mobx来替代掉redux. MobX: MobX 是一个经过战火洗礼的库,它通过透明的函数响应式编程(transparently applying functional reactive programming - TFRP)使得状态管理变得简单和可扩展.Mobx 就是一个集中化管理数据的库,类似之前学习的 vuex 和 redux. 为什么要使用它呢? 在单页项目中,实现组

Mobx | 强大的状态管理工具 | 可以用Mobx来替代掉redux

来源简书 电梯直达 https://www.jianshu.com/p/505d9d9fe36a Mobx是一个功能强大,上手非常容易的状态管理工具.就连redux的作者也曾经向大家推荐过它,在不少情况下你的确可以使用Mobx来替代掉redux. 本教程旨在介绍其用法及概念,并重点介绍其与React的搭配使用. 先来看看最基本的用法. observable和autorun import { observable, autorun } from 'mobx'; const value = obse

React项目中使用Mobx状态管理(二)

并上一节使用的是普通的数据状态管理,不过官方推荐使用装饰器模式,而在默认的react项目中是不支持装饰器的,需要手动启用. 官方参考 一.添加配置 官方提供了四种方法, 方法一.使用TypeScript,顾名思义该方法是项目使用typescript时的配置 方法二.使用babel-preset-mobx, 安装并添加到.babelrc配置中,该方法需要升级一些依赖, babel-core -> @/babel-core 7.x babel-loader -> @/babel-loader 8.

MySQL入门很简单: 12 MYSQL 用户管理

1. 权限表 安装MySQL会自动安装一个名为mysql的数据库,存储权限表: user表, db表,host表,table_priv表,columns_priv表,proc_priv表等. 1)user表 :39个字段,分为四类——用户列,权限列,安全列,资源控制列 用户列: Host, User,Password, 这三个字段决定用户能否登陆: 权限列:以priv结尾的字段, 决定用户的权限: 安全列: 资源控制列: 2.账户管理 1)用户登录和退出 mysql -h hostname|ho

react项目的中使用mobx状态管理安装ES7装饰器(Decorator)语法教程

那么如何实现装饰器的使用呢? 1.在命令行工具中使用 npm run eject.不熟的情况下可能会报错,如果报错的信息大概意思是:有些文件未被追踪到,那么直接git add . 再 git commit -m "",或者直接在.gitignore中忽略这些文件(不建议)2.npm run eject之后package.json中会出现很多依赖建议yarn/npm i 一下.3.然后打开package.json文件,找到“babel”开头的一个对象,(一般在最后,),这是原始的样子:

flux,redux,vuex状态集管理工具之间的区别

一:redux和flux的区别 1)redux是flux中的一个实现 2))在redux中我们只能定义一个store,在flux中我们可以定义多个 3)在redux中,store和dispatch都放到了store,结构更加清晰 4)在redux中本身就内置State对象,对仓库的管理更加明确 二:redux和vuex的区别 1)vuex是redux的基础上进行改变,对仓库的管理更加明确 2)使用mutation来替换redux中的reducer 3)vuex有自动渲染的功能,所以不需要更新 三

LogCook 一个简单实用的Android日志管理工具

众所周知,日志的管理是软件系统很重要的一部分,千万不可忽略其重要性.完整的日志将会在系统维护中起着异常重要的作用,就好像磨刀不误砍柴工一样,日志就像对系统进行分析的工具,工具便捷了,对系统分析起来就能达到事半功倍的效果.开发者必须要明白日志的价值和意义,万万不可忽略和轻视. LogCook是一款非常简洁实用的Android日记管理工具.LogCook的中文翻译是日志厨师,你可以把它看作是一个日志美食家. 特点 作为一款日志管理工具它最大的特点就是简单实用,与Android原生的日志功能相比较它具

(译) Google Flutter 中的简单状态管理

原文链接 我是如何遇见 Google Flutter的 这对我来这是像往常一样的码代码的一天.我的一个朋友在我们的开发者群组中发了这么一个问题,是否有人尝试过Google Flutter.它想要知道React Native 和 Google Flutter之间的比较.这个问题让我种草了Google Flutter.我之前从没有听过Google Flutter.它是否值得与React Native进行比较,就像AngularJS相较于ReactJS? 我必须承认.我是一个React的迷弟.我已经使

简单主机批量管理工具

题目:简单主机批量管理工具 需求: 主机分组 登录后显示主机分组,选择分组后查看主机列表 可批量执行命令.发送文件,结果实时返回 主机用户名密码可以不同 流程图: 说明: ### 作者介绍: * author:lzl ### 博客地址: * http://www.cnblogs.com/lianzhilei/p/5881434.html ### 功能实现 题目:简单主机批量管理工具 需求: 主机分组 登录后显示主机分组,选择分组后查看主机列表 可批量执行命令.发送文件,结果实时返回 主机用户名密