網站首頁 編程語言 正文
Mobx與redux的區別
-
mobx
寫法偏向與oop
- 對一份數據可以直接進行修改操作,不需要始終返回一個新的數據
- 并非單一
store
,可以多個 -
redux
默認使用js
原生對象存儲數據,而mobx
使用可觀察對象
使用
安裝
npm i mobx@5
使用嚴格模式
configure({ enforceActions:'always' })
observable&&autorun
-
autorun
用于監聽值的改變 -
observable
用于定義
import React,{Component} from 'react'; import {observable,autorun} from 'mobx'; /** * 基本類型 */ //對于普通類型數據的監聽 let observableNumber=observable.box(66) let observableDesc=observable.box("學無止境...") //第一次執行一次,之后被改變與它相關的會再次執行 autorun(()=>{ console.log(observableNumber.get()) }) setTimeout(() => { observableNumber.set(11) observableDesc.set("愛學.") }, 2000); /** * 對象使用map */ let myobj=observable.map({ name:"碰磕", age:9999 }) autorun(()=>{ console.log("對象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//標記兩個方法是action,專門修改可觀察的value }) export default store
然后在需要改變isTabbarShow
的地方調用方法即可…
使用裝飾器寫法
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.創建.babelrc{
? ? "presets": [
? ? ? ? "@babel/preset-env"
? ? ],
? ? "plugins": [
? ? ? ? [
? ? ? ? ? ? "@babel/plugin-proposal-decorators",
? ? ? ? ? ? {
? ? ? ? ? ? ? ? "legacy": true
? ? ? ? ? ? }
? ? ? ? ]
? ? ]
}
3.創建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需要配置
文件—首選項----設置-----搜索experimentalDecorators----勾上該設置
最后重新運行即可…
runInAction(異步)
異步請求時需要,在嚴格模式下
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的基本使用就大功告成了
原文鏈接:https://blog.csdn.net/m_xiaozhilei/article/details/125456832
相關推薦
- 2022-10-01 SQL中concat和substr組合運用解析_MsSql
- 2022-07-24 Nginx?配置?HTTPS的詳細過程_nginx
- 2022-12-24 TS裝飾器bindThis優雅實現React類組件中this綁定_React
- 2022-08-29 .NET?Core自定義配置文件_實用技巧
- 2022-06-17 android實現可上下回彈的scrollview_Android
- 2022-06-14 C語言?auto和register關鍵字_C 語言
- 2022-05-07 Python?識別錄音并轉為文字的實現_python
- 2022-07-21 SpringBoot整合SpringCache詳解
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支