React Native中Mobx的使用方法详解


Posted in Javascript onDecember 04, 2018

前言

从今天开始我们来搞搞状态管理可否,这几天没怎么写博客,因为被病魔战胜了,tmd,突然的降温让我不知所措,大家最近注意安全,毕竟年底了,查的严,呸,大家注意保暖

特别声明:写该文只是写一下用MobX的思路,有很多地方我会直接放官网链接,因为官网已经写的够详细了

首先来个比较简单的,MobX。

引用官网上的一句话:

MobX 是一个经过战火洗礼的库,它通过透明的函数响应式编程(transparently applying functional reactive programming - TFRP)使得状态管理变得简单和可扩展。MobX背后的哲学很简单:

MobX 是一款精准的状态管理工具库,对我来说非常容易学习和接受。我在 React 和 React Native 应用中使用过 Flux、Alt、Redux 和 Reflux,但我会毫不犹豫地说,MobX 的简单性立即成为了我最喜欢的状态管理工具。我期望能将它运用在未来的项目中,并且对 MobX 的发展拭目以待。

任何源自应用状态的东西都应该自动地获得。其中包括UI、数据序列化、服务器通讯,等等。

上官网的图

React Native中Mobx的使用方法详解

环境我就不配了,官网给了详细的教程,我的环境是RN+TS,这里需要特别注意一下,由于Mobx要用的装饰器,如果单纯的用create-react-app安装好环境后,一定要特别特别注意:

此时使用@observable是不行的,因为不支持装饰器语法,

此问题有两种解决方案:1.在当前环境中设置支持装饰器,

 下面是官网的详细配置链接,https://cn.mobx.js.org/best/decorators.html

  2.使用MobX的内置的 decorate  工具在不支持装饰器语法的情况加使用

接下来下面给你吃,不是,下面我用一个小例子来演示一下,Go,Go,Go(注意,我这里面默认装饰器是可用的,因为我环境配好了已经)

1.yarn add mobx 

2.首先我们状态管理肯定会有一个仓库吧,那我们来建一个仓库,(注意:我创建了两个小的分支,因为状态管理总不可能怼到一个文件里面吧)

首先上一手仓库的结构

React Native中Mobx的使用方法详解 

home.tsx的代码

注意:1. 从mobx中引入observable,action

 2.用装饰器修饰仓库的数据

 3.导出时需要new一下

import { observable, action } from 'mobx'


class List {
 @observable isShowMap: boolean = false

 @action
 switchTab (info: boolean) {
 this.isShowMap = info
 }
}

export default new List()

list.tsx的代码

注意:1.此处多加入了runInAction,不加此属性当然也可以,但是就不会记录时间旅行了

import { observable, action, runInAction } from 'mobx'

class List {
 @observable listData: Array<any> = []

 @action
 getListData () {
 fetch('https://ik9hkddr.qcloud.la/mock/cookbook-list.json')
  .then(reponse => reponse.json())
  .then(result => {
  runInAction(() => {
   this.listData = result.data
  })
  })
 }
}

export default new List()

index.js的代码

注意:在此处将两个树枝里面的数据都引入,合并到一起

import list from './list'
import home from './home'
const store = { list, home }
export default store

3.将仓库绑定到根组件上

     注意:在此引入Provider将仓库和根组件绑定

import React from 'react'
 import { Provider } from 'mobx-react'
 import Home from './pages/home/Home'
 import HotList from './pages/hotlist/HotList'
 import store from './store' 

export default class componentName extends React.Component {
 render() {
 return (
  <Provider store={store}>
  <RootStack></RootStack>
  </Provider>
 )
 }
}}

4.最后一步,在组件中引用仓库里的数据,并可以修改仓库里的数据

  注意:1.引入observer和inject,将组件和仓库连接起来,类似于在React中使用react-redux中的connnect方法

import React from 'react'
import { observer, inject } from 'mobx-react'
import {
 View,
 Text,
} from 'react-native'

interface Props {
}
interface State {
}
//此处时引用最重要的步骤用inject和observer
@inject('store')
@observer
export default class Home extends React.Component<Props, State> {
 render () {
 return (
  <View>
  {/* 引用store里面储存的值 */}
  <Text>{this.props.store.home.isShowMap}</Text>
  </View>
 )
 }
 componentDidMount () {
 //调用函数修改store里面的值
 this.props.store.home.switchTab(value)
 }
}

到这里,今天的随笔已经结束了,可能写的不是那木有条理,若有错误还往各位同学指出,我嗓子已经说不出话来了,所以在这提醒各位同学

 学技术的同时一定要记得锻炼身体,我的天,少吃饭多吃药,多打代码多保健,活着最重要!

 总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
用XMLDOM和ADODB.Stream实现base64编码解码实现代码
Nov 28 Javascript
JavaScript实现获得所有兄弟节点的方法
Jul 23 Javascript
jquery实现漫天雪花飞舞的圣诞祝福雪花效果代码分享
Aug 20 Javascript
jquery+CSS实现的多级竖向展开树形TRee菜单效果
Aug 24 Javascript
EasyUI中在表单提交之前进行验证
Jul 19 Javascript
完美解决手机网页中输入框被输入法遮挡的问题
Dec 19 Javascript
详解JS判断页面是在手机端还是在PC端打开的方法
Apr 26 Javascript
React精髓!一篇全概括小结(急速)
May 23 Javascript
vue如何自动化打包测试环境和正式环境的dist/test文件
Jun 06 Javascript
如何在JavaScript中谨慎使用代码注释
Jun 21 Javascript
如何使用JavaScript检测空闲的浏览器选项卡
May 28 Javascript
Vue h函数的使用详解
Feb 18 Vue.js
element ui table(表格)实现点击一行展开功能
Dec 04 #Javascript
elementUI中Table表格问题的解决方法
Dec 04 #Javascript
zepto.js 实时监听输入框的方法
Dec 04 #Javascript
vue 之 css module的使用方法
Dec 04 #Javascript
Vue源码解析之数组变异的实现
Dec 04 #Javascript
小程序指纹验证的实现代码
Dec 04 #Javascript
js实现下拉框二级联动
Dec 04 #Javascript
You might like
PHP中的超全局变量
2006/10/09 PHP
PHP 创建标签云函数代码
2010/05/26 PHP
phpstorm最新激活码分享亲测phpstorm2020.2.3版可用
2020/11/22 PHP
js 数值项目的格式化函数代码
2010/05/14 Javascript
utf-8编码引起js输出中文乱码的解决办法
2010/06/23 Javascript
Google AJAX 搜索 API实现代码
2010/11/17 Javascript
jquery异步请求实例代码
2011/06/21 Javascript
extjs 初始化checkboxgroup值的代码
2011/09/21 Javascript
jQuery实现的简洁下拉菜单导航效果代码
2015/08/26 Javascript
微信小程序 Canvas增强组件实例详解及源码分享
2017/01/04 Javascript
Angular ui.bootstrap.pagination分页
2017/01/20 Javascript
基于Angularjs+mybatis实现二级评论系统(仿简书)
2017/02/13 Javascript
纯js+css实现在线时钟
2020/08/18 Javascript
python模拟登录百度代码分享(获取百度贴吧等级)
2013/12/27 Python
Python中如何获取类属性的列表
2016/12/26 Python
Python实现定时任务
2017/02/08 Python
http请求 request失败自动重新尝试代码示例
2018/01/25 Python
python 给DataFrame增加index行名和columns列名的实现方法
2018/06/08 Python
Python计算开方、立方、圆周率,精确到小数点后任意位的方法
2018/07/17 Python
python 解决print数组/矩阵无法完整输出的问题
2020/02/19 Python
Python数据正态性检验实现过程
2020/04/18 Python
Pytorch之扩充tensor的操作
2021/03/04 Python
HTML5打开本地app应用的方法
2016/03/31 HTML / CSS
Hertz荷兰:荷兰和全球租车
2018/01/07 全球购物
初一家长会邀请函
2014/01/31 职场文书
《小蝌蚪找妈妈》教学反思
2014/02/21 职场文书
人力资源管理系自荐信
2014/05/31 职场文书
集体生日活动方案
2014/08/18 职场文书
国企干部对照检查材料
2014/08/22 职场文书
房产协议书范本
2014/10/18 职场文书
2014年语文教学工作总结
2014/12/17 职场文书
幼儿园大班教师个人工作总结
2015/02/05 职场文书
新农村建设指导员工作总结
2015/08/13 职场文书
高中班主任工作总结(范文)
2019/08/20 职场文书
零基础学java之带返回值的方法的定义和调用
2022/04/10 Java/Android
ant design vue的form表单取值方法
2022/06/01 Vue.js