React Mobx狀態(tài)管理工具的使用
Mobx與redux的區(qū)別
mobx寫(xiě)法偏向與oop- 對(duì)一份數(shù)據(jù)可以直接進(jìn)行修改操作,不需要始終返回一個(gè)新的數(shù)據(jù)
- 并非單一
store,可以多個(gè) redux默認(rèn)使用js原生對(duì)象存儲(chǔ)數(shù)據(jù),而mobx使用可觀察對(duì)象
使用
安裝
npm i mobx@5
使用嚴(yán)格模式
configure({
enforceActions:'always'
})
observable&&autorun
autorun用于監(jiān)聽(tīng)值的改變observable用于定義
import React,{Component} from 'react';
import {observable,autorun} from 'mobx';
/**
* 基本類(lèi)型
*/
//對(duì)于普通類(lèi)型數(shù)據(jù)的監(jiān)聽(tīng)
let observableNumber=observable.box(66)
let observableDesc=observable.box("學(xué)無(wú)止境...")
//第一次執(zhí)行一次,之后被改變與它相關(guān)的會(huì)再次執(zhí)行
autorun(()=>{
console.log(observableNumber.get())
})
setTimeout(() => {
observableNumber.set(11)
observableDesc.set("愛(ài)學(xué).")
}, 2000);
/**
* 對(duì)象使用map
*/
let myobj=observable.map({
name:"碰磕",
age:9999
})
autorun(()=>{
console.log("對(duì)象name屬性改變了"+myobj.get("name"))
})
class Zhuye extends Component{
render() {
return (
<div>
Mobx
</div>
);
};
};
export default Zhuye;
action
專門(mén)修改可觀察的value
import {observable,autorun,action} from 'mobx'
const store=observable({
isTabbarShow:true,
list:[],
cityName:"北京",
changeShow(){
this.isTabbarShow=true
},
changeHide(){
this.isTabbarShow=false
}
},{
changeHide:action,
changeShow:action//標(biāo)記兩個(gè)方法是action,專門(mén)修改可觀察的value
})
export default store
然后在需要改變isTabbarShow的地方調(diào)用方法即可…
使用裝飾器寫(xiě)法
import {observable,autorun,action} from 'mobx'
class Store{
@observable isTabbarShow=true
@observable list=[]
@action changeShow(){
this.isTabbarShow=true
}
@action changeHide(){
this.isTabbarShow=false
}
}
const store=new Store()
export default store
由于不支持裝飾器寫(xiě)法,需要讓它支持
1.安裝依賴:
npm i @babel/core @babel/plugin-proposal-decorators @babel/preset-env
2.創(chuàng)建.babelrc{
"presets": [
"@babel/preset-env"
],
"plugins": [
[
"@babel/plugin-proposal-decorators",
{
"legacy": true
}
]
]
}
3.創(chuàng)建config-overrides.js
const path = require('path')
const { override, addDecoratorsLegacy } = require('customize-cra')
function resolve(dir) {
return path.join(__dirname, dir)
}
const customize = () => (config, env) => {
config.resolve.alias['@'] = resolve('src')
if (env === 'production') {
config.externals = {
'react': 'React',
'react-dom': 'ReactDOM'
}
}
return config
};
module.exports = override(addDecoratorsLegacy(), customize())
4.安裝依賴
npm i customize-cra react-app-rewired
5.修改package.json
----...
"scripts": {
"start": "react-app-rewired start",
"build": "react-app-rewired build",
"test": "react-app-rewired test",
"eject": "react-app-rewired eject"
},
----....
vscode需要配置
文件—首選項(xiàng)----設(shè)置-----搜索experimentalDecorators----勾上該設(shè)置
最后重新運(yùn)行即可…
runInAction(異步)
異步請(qǐng)求時(shí)需要,在嚴(yán)格模式下
import axios from 'axios'
import {observable,autorun,action,runInAction, configure} from 'mobx'
configure({
enforceActions:'always'
})
class Store{
@observable isTabbarShow=true
@observable list=[]
@action changeShow(){
this.isTabbarShow=true
}
@action changeHide(){
this.isTabbarShow=false
}
@action getList(){
axios({
method:'GET',
url:"https://m.maizuo.com/gateway?cityId=440300&ticketFlag=1&k=2005318",
headers:{
"X-Client-Info": '{"a":"3000","ch":"1002","v":"5.2.0","e":"1654433035923688551579649"}',
"X-Host": "mall.film-ticket.cinema.list"
}
}).then(res=>{
runInAction(()=>{
this.list=res.data.data.cinemas
})
})
}
}
const store=new Store()
export default store
這樣就可以修改this.list的了
Mobx的基本使用就大功告成了
到此這篇關(guān)于JavaScript Mobx狀態(tài)管理工具的使用的文章就介紹到這了,更多相關(guān)JS Mobx內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
react通過(guò)組件拆分實(shí)現(xiàn)購(gòu)物車(chē)界面詳解
這篇文章主要介紹了react通過(guò)組件拆分來(lái)實(shí)現(xiàn)購(gòu)物車(chē)頁(yè)面的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
教你使用vscode 搭建react-native開(kāi)發(fā)環(huán)境
本文記錄如何使用vscode打造一個(gè)現(xiàn)代化的react-native開(kāi)發(fā)環(huán)境,旨在提高開(kāi)發(fā)效率和質(zhì)量。本文給大家分享我遇到的問(wèn)題及解決方法,感興趣的朋友跟隨小編一起看看吧2021-07-07
React組件實(shí)例三大核心屬性State props Refs詳解
組件實(shí)例的三大核心屬性是:State、Props、Refs。類(lèi)組件中這三大屬性都存在。函數(shù)式組件中訪問(wèn)不到 this,也就不存在組件實(shí)例這種說(shuō)法,但由于它的特殊性(函數(shù)可以接收參數(shù)),所以存在Props這種屬性2022-12-12
React中useState值為對(duì)象時(shí)改變值不渲染問(wèn)題
這篇文章主要介紹了React中useState值為對(duì)象時(shí)改變值不渲染問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02
詳解webpack + react + react-router 如何實(shí)現(xiàn)懶加載
這篇文章主要介紹了詳解webpack + react + react-router 如何實(shí)現(xiàn)懶加載,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-11-11
使用React-Window實(shí)現(xiàn)虛擬滾動(dòng)效果的示例代碼
React-Window?是一個(gè)為?React?應(yīng)用程序中高效渲染大數(shù)據(jù)集而設(shè)計(jì)的庫(kù),它基于窗口化或虛擬化的原則運(yùn)行,本文將使用React-Window實(shí)現(xiàn)虛擬滾動(dòng)效果,感興趣的可以了解下2024-01-01
React?less?實(shí)現(xiàn)縱橫柱狀圖示例詳解
這篇文章主要介紹了React?less?實(shí)現(xiàn)縱橫柱狀圖示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09

