mobx使用
- 1.mobx状态管理
安装:creact-react-app mobx

action、store、reducer。
action是一个函数,事件调用actions直接修改state,Actions是唯一可以修改state的东西,并且可能有副作用,副作用是修改完之后,会激起一些计算属性的更新。
state是可观测的(@observable),不能包含冗余或者推导数据,可以是数组啊,类啊,等等。
Computed类似于vue中的计算属性。
Reactions当观察的东西发生变化,就可以做一些事情。 在store里面去映射一个函数,这个函数会根据原有的值进行自动响应式的修改,返回一个新值。最后触发一个Reactions,类似于redux的subscribe,给reactions传两个函数,第一个函数是我检测的变量的列表,或者state列表,第二个函数就是要检测变化的回调函数,可以再去调Actions,做新的触发。
因为store要返回全新的,所以适合用immitable。vueX
action、mutation、state、component。
它自动做了响应式处理,不像redux需要订阅。装饰器:@action和@observable增强原有的类或方法的能力,类似于高阶组件。
1安装yarn add mobx
2.observbale 把我们的数据源变成可观测的,数据实现响应。
ES6的装饰器在react中有时不支持,要安装插件
()写法一:
数组、对象、ES6中的map等都可以变成可观察的。
例:写一个可观测的数组:const arr = observable (['a','b'])
数值不可观察。
如果想让数值变成可观察的,使用box()或get()、set()
cosnt num = observable.box()
num.value =
()写法二:必须要写在类中
@observable
const arr = ['a','b']import {observable} from "mobx" //可观察的
export default()=>{
const arr = observable(["a","b"]) //响应式
const obj = observable({x:,y:})
console.log(arr) //打印结果如下 略
console.log(obj) //打印结果如下图2. 略
console.log(Array.isArray(arr)) //打印true,证明还是数组。 return null
}2.弹射
目的:自己可以做深度的webpack配置。这个过程是不可逆的。
控制台输出:yarn ejext
3.安装支持装饰器的插件(typescript下的项目不需要装)
yarn add babel-plugin-tranform-decorators-legacy(不一定行)4.decorators装饰器
export default class Mobx extends Component{
@observable
arr = ['a','b'] //这时arr成为类里面的属性,就可以当成一个可观察的对象去引用了/
render(){
console.log(this.arr)
return null
} }5.(@)computed 计算属性,可以当作装饰器用,也可以当方法用。
(1)computed作为函数。(写在render中)export default class Mobx extends Component{
@observable
name = "xinya"
render(){
cosnt otherName = computed(()=>{
return this.name
})
otherName.observe((changeValue)=>{ //检测变量变化,changeValues是一个对象,里面有newValue和oldValue
console.log(changeValue.newValue)
})
this.name = "kaiqin"
return null
} }(2)@computed 计算属性作为装饰器,必须在函数前面加get,它不需要调用,可以直接读取。
export default class Mobx extends Component{
@observable
name = "xinya"
@computed
get otherName(){
return this.name +"!!"
}
render(){
autorun(()=>{ //会检测name变化,即使没有变化,也会打印一次。根据依赖值变化自动执行,不管有没有变化,刚开始都会执行一次。
console.log(this.name+"!!")
})
setTimeOut(()=>{
this.name = "kaiqin"
this.otherName
},) return null
} }6.when只执行一次
when有两个参数,都是回调函数,当第一个参数返回true的时候,第二个参数才会执行。7.Reaction 第二个回调函数的参数data,是第一个回调函数的返回值。
第一个参数是函数,有返回值data。第二个参数也是一个函数,这个函数又有两个参数,第一个参数是前面的返回值data,第二个参数是reaction。
和autorun的不同点是reaction第一次不执行,只有修改之后执行。reaction(()=>{
return this.name
},(data)=>{
console.log(data) //shaojun
})setTimeout(()=>{
this.name = "shaojun"
this.age =
})8.@action 就是一个函数
@computed
get myJoin(){
return this.name + this.age
}
@action
printValue(){
console.log(this.myJoin) //调用计算属性不用加括号
}
render(){
setTimeOut(()=>{
this.printValue()
},100)
}
9.案例10.将mobx和react结合,使所有组件都被注入了store
安装yarn add mobx-redux
import {Provider } from "mobx-react"
import {inject} from "mobx-react" //类似与connect
@inject('store')
<Provider store={store}>
<Home>
<Provider>
//在自文件中runInAction
可以跟踪值的变化 - 凯琴10:251.mobx状态管理
安装:creact-react-app mobxaction、store、reducer。
action是一个函数,事件调用actions直接修改state,Actions是唯一可以修改state的东西,并且可能有副作用,副作用是修改完之后,会激起一些计算属性的更新。
state是可观测的(@observable),不能包含冗余或者推导数据,可以是数组啊,类啊,等等。
Computed类似于vue中的计算属性。
Reactions当观察的东西发生变化,就可以做一些事情。
在store里面去映射一个函数,这个函数会根据原有的值进行自动响应式的修改,返回一个新值。最后触发一个Reactions,类似于redux的subscribe,给reactions传两个函数,第一个函数是我检测的变量的列表,或者state列表,第二个函数就是要检测变化的回调函数,可以再去调Actions,做新的触发。
因为store要返回全新的,所以适合用immitable。
vueX
action、mutation、state、component。
它自动做了响应式处理,不像redux需要订阅。装饰器:@action和@observable增强原有的类或方法的能力,类似于高阶组件。
1安装
yarn add mobx2.observbale 把我们的数据源变成可观测的,数据实现响应。
ES6的装饰器在react中有时不支持,要安装插件
(1)写法一:
数组、对象、ES6中的map等都可以变成可观察的。
例:写一个可观测的数组:const arr = observable (['a','b'])
数值不可观察。
如果想让数值变成可观察的,使用box()或get()、set()
cosnt num = observable.box(9)
num.value = 10(2)写法二:必须要写在类中
@observable
const arr = ['a','b']import {observable} from "mobx" //可观察的
export default()=>{
const arr = observable(["a","b"]) //响应式
const obj = observable({x:0,y:1})console.log(arr) //打印结果如下
console.log(obj) //打印结果如下图2.
console.log(Array.isArray(arr)) //打印true,证明还是数组。
return null
}
1.
详情见ES6的proxy。
2.2.弹射
目的:自己可以做深度的webpack配置。这个过程是不可逆的。控制台输出:yarn ejext
3.安装支持装饰器的插件(typescript下的项目不需要装)
yarn add babel-plugin-tranform-decorators-legacy(不一定行)4.decorators装饰器
export default class Mobx extends Component{
@observable
arr = ['a','b'] //这时arr成为类里面的属性,就可以当成一个可观察的对象去引用了/
render(){
console.log(this.arr)
return null
}
}5.(@)computed 计算属性,可以当作装饰器用,也可以当方法用。
(1)computed作为函数。(写在render中)export default class Mobx extends Component{
@observable
name = "xinya"
render(){
cosnt otherName = computed(()=>{
return this.name
})
otherName.observe((changeValue)=>{ //检测变量变化,changeValues是一个对象,里面有newValue和oldValue
console.log(changeValue.newValue)
})
this.name = "kaiqin"
return null
}
}
(2)@computed 计算属性作为装饰器,必须在函数前面加get,它不需要调用,可以直接读取。export default class Mobx extends Component{
@observable
name = "xinya"@computed
get otherName(){
return this.name +"!!"
}
render(){
autorun(()=>{ //会检测name变化,即使没有变化,也会打印一次。根据依赖值变化自动执行,不管有没有变化,刚开始都会执行一次。
console.log(this.name+"!!")
})
setTimeOut(()=>{
this.name = "kaiqin"
this.otherName
},1000)
return null
}
}
6.when只执行一次
when有两个参数,都是回调函数,当第一个参数返回true的时候,第二个参数才会执行。7.Reaction 第二个回调函数的参数data,是第一个回调函数的返回值。
第一个参数是函数,有返回值data。第二个参数也是一个函数,这个函数又有两个参数,第一个参数是前面的返回值data,第二个参数是reaction。
和autorun的不同点是reaction第一次不执行,只有修改之后执行。reaction(()=>{
return this.name
},(data)=>{
console.log(data) //shaojun
})setTimeout(()=>{
this.name = "shaojun"
this.age =
})8.@action 就是一个函数
@computed
get myJoin(){
return this.name + this.age
}@action
printValue(){
console.log(this.myJoin) //调用计算属性不用加括号
}render(){
setTimeOut(()=>{
this.printValue()
},100)}
9.案例
10.将mobx和react结合,使所有组件都被注入了store
安装yarn add mobx-reduximport {Provider } from "mobx-react"
import {inject} from "mobx-react" //类似与connect@inject('store')
<Provider store={store}>
<Home>
<Provider>
//在自文件中runInAction
可以跟踪值的变化
mobx使用的更多相关文章
- mobx @computed的解读
写在前面:我一开始看不懂官网的@computed的作用,因为即使我把@computed去掉,依然能正确的report,然后我百度谷歌都找不到答案,下面都是我自己的理解,如果是有问题的,不对的,请务必留 ...
- 十分钟介绍mobx与react
原文地址:https://mobxjs.github.io/mobx/getting-started.html 写在前面:本人英语水平有限,主要是写给自己看的,若有哪位同学看到了有问题的地方,请为我指 ...
- mobx源码解读3
计算属性 function Todo() { this.id = Math.random() mobx.extendObservable(this, { aaa: 222, bbb: 11, ccc: ...
- mobx源码解读4
这节介绍一下mobx的变动因子的稳定性. mobx整个系统是由ObservableValue, ComputedValue, Reaction这三个东西构建的 ObservableValue 是最小的 ...
- mobx源码解读2
我们将上节用到的几个类的构造器列举一下吧: function Reaction(name, onInvalidate) { if (name === void 0) { name = "Re ...
- mobx源码解读1
mobx是redux的代替品,其本身就是一个很好的MVVM框架.因此花点力气研究一下它. 网上下最新的2.75 function Todo() { this.id = Math.random() mo ...
- [React + Mobx] Mobx and React intro: syncing the UI with the app state using observable and observer
Applications are driven by state. Many things, like the user interface, should always be consistent ...
- mobx react
目录结构: Model/index.js 'use strict'; import { action, autorun, observable, computed } from "mobx& ...
- Mobx使用详解
Mobx是一个功能强大,上手非常容易的状态管理工具.就连redux的作者也曾经向大家推荐过它,在不少情况下你的确可以使用Mobx来替代掉redux. 本教程旨在介绍其用法及概念,并重点介绍其与Reac ...
- React框架 dva 和 mobx 的使用感受
最近在用react写web项目,领导为了让前端便于维护要求都用react作为开发基础,框架选型不限.在使用 react 的时候或多或少会接触到状态管理,从开始学 react 到现在也挺久了,做一些前端 ...
随机推荐
- 【miscellaneous】网络摄像机
自20世纪90年代初期网络摄像机开始诞生,产业已历经20余年的演变. "IP大时代"的口号在安防领域已响彻已久,但也是自2015年至今才开使有了真正的底气.当全面超越模拟已尘埃落定 ...
- java反射机制学习笔记
内容引用自:https://www.cnblogs.com/wkrbky/p/6201098.html https://www.cnblogs.com/xumBlog/p/8882489.html,本 ...
- 10大IT社区
技术社区导航 http://tooool.org/ 1. cnblogs 人多内容质量最高 2.csdn csdn的注册人数多,但新手多 3.java eye java eye注册用户刚突破10万,但 ...
- 关于Eclipse及JDK安装过程中的一些问题
一,环境变量的配置 1.配置CLASSPATH系统变量 CLASSPATH系统变量为类查找路径 ①.在使用javac进行编译时遇到import时候就会通过这个变量里面配置的路径去查找.如果配置的是目录 ...
- sql server 函数详解(3)数据类型转换函数和文本图像函数
数据类型转换函数 文本和图像函数 --在同时处理不同数据类型的值时,SQL Server一般会自动进行隐士类型转换.对于数据类型相近的值是有效的,比如int和float,但是对于其它数据类型,例如整型 ...
- 可以提升幸福感的js小技巧(上)
1. 类型强制转换 1.1 string强制转换为数字 可以用 *1来转化为数字(实际上是调用 .valueOf方法) 然后使用 Number.isNaN来判断是否为 NaN,或者使用 a!==a 来 ...
- openlayers之地图测距侧面
项目背景vue-cli3.0 public下html需要引入文件 <link rel="stylesheet" href="<%= BASE_URL %> ...
- vue中如何引入css文件
两种方式引入css文件,一种是直接在main.js中引入(也可以在其他的.vue文件中的<script></script>标签中),即下面这种写法: import 'eleme ...
- Spring Boot自定义Redis缓存配置,保存value格式JSON字符串
Spring Boot自定义Redis缓存,保存格式JSON字符串 部分内容转自 https://blog.csdn.net/caojidasabi/article/details/83059642 ...
- Vue示例教程
<!DOCTYPE html> <html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml&q ...