React Mobx狀態(tài)管理工具的使用
Mobx與redux的區(qū)別
mobx
寫法偏向與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)聽值的改變observable
用于定義
import React,{Component} from 'react'; import {observable,autorun} from 'mobx'; /** * 基本類型 */ //對(duì)于普通類型數(shù)據(jù)的監(jiān)聽 let observableNumber=observable.box(66) let observableDesc=observable.box("學(xué)無止境...") //第一次執(zhí)行一次,之后被改變與它相關(guān)的會(huì)再次執(zhí)行 autorun(()=>{ console.log(observableNumber.get()) }) setTimeout(() => { observableNumber.set(11) observableDesc.set("愛學(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
專門修改可觀察的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,專門修改可觀察的value }) export default store
然后在需要改變isTabbarShow
的地方調(diào)用方法即可…
使用裝飾器寫法
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
由于不支持裝飾器寫法,需要讓它支持
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通過組件拆分實(shí)現(xiàn)購(gòu)物車界面詳解
這篇文章主要介紹了react通過組件拆分來實(shí)現(xiàn)購(gòu)物車頁(yè)面的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08教你使用vscode 搭建react-native開發(fā)環(huán)境
本文記錄如何使用vscode打造一個(gè)現(xiàn)代化的react-native開發(fā)環(huán)境,旨在提高開發(fā)效率和質(zhì)量。本文給大家分享我遇到的問題及解決方法,感興趣的朋友跟隨小編一起看看吧2021-07-07React組件實(shí)例三大核心屬性State props Refs詳解
組件實(shí)例的三大核心屬性是:State、Props、Refs。類組件中這三大屬性都存在。函數(shù)式組件中訪問不到 this,也就不存在組件實(shí)例這種說法,但由于它的特殊性(函數(shù)可以接收參數(shù)),所以存在Props這種屬性2022-12-12React中useState值為對(duì)象時(shí)改變值不渲染問題
這篇文章主要介紹了React中useState值為對(duì)象時(shí)改變值不渲染問題,具有很好的參考價(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-01React?less?實(shí)現(xiàn)縱橫柱狀圖示例詳解
這篇文章主要介紹了React?less?實(shí)現(xiàn)縱橫柱狀圖示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09