日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

redux VS mobx (装饰器配合使用)

發布時間:2025/5/22 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 redux VS mobx (装饰器配合使用) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言:redux和mobx都是狀態管理器,避免父級到子級再到子子級嵌套單向數據流,可以邏輯清晰的管理更新共享數據。(刷新頁面redux儲蓄數據即消失) 配置使用裝飾器(使用高階函數包裝你的組件):
npm install babel-plugin-transform-decorators-legacy --save-dev

.babelrc配置:

{"presets": ["react-app"],"plugins": [["import",{"libraryName": "antd","style": true}],"transform-decorators-legacy"] }

當使用react native的時候,下面這個預設可以代替 transform-decorators-legacy

"babel": {"presets": ["react-app","react-native-stage-0/decorator-support"]}, 一.redux redux.js文件: // 定義變量 const CODE_CHANGE = 'CODE_CHANGE' const NUMBER_LIST = 'NUMBER_LIST' const ERROR_MSG = 'ERROR_MSG'// 初始化數據 const initState = {industryNumber: storage.get('industryNumber'),numberList: [],msg: '' }// reducer export function isNumber(state = initState, action) {switch (action.type) {case CODE_CHANGE:return { ...state, industryNumber: action.industryNumber }case NUMBER_LIST:return { ...state, numberList: action.numberList }case ERROR_MSG:return { ...state, msg: action.msg }default:return state} }

reducer.js文件:

import { combineReducers } from 'redux' import { isNumber } from '/redux'export default combineReducers({ isNumber }) // 合并所有的reducer,并且返回

index.js入口文件:

import React from 'react' import ReactDOM from 'react-dom' import MainRouter from './Router'// 引入redux import { createStore, applyMiddleware, compose } from 'redux' importthunk from 'redux-thunk' // 中間插件,增強dispatch功能,可異步加載action可接受函數參數 import { Provider } from 'react-redux' //redux組件,全部子級可以直接更新redux的state import reducers from './reducer' // 這里判斷瀏覽器環境是否開啟Redux DevTools的插件(chrome瀏覽器擴展插件應用商店下載) const reduxDevtools = window.devToolsExtension ? window.devToolsExtension() : h => h //沒有插件則返回空函數 const store = createStore(reducers, compose( applyMiddleware(thunk), reduxDevtools )) // 創建store ReactDOM.render( <Provider store={store}> <MainRouter/> //路由 </Provider>, document.getElementById('root') )

某子組件:

import { connect } from 'react-redux' // 裝飾器 const fetchNumberList = () => { return dispatch => { // 異步請求需要 dispatch => {}包裹fetch('異步請求').then(res => {if (res.code === 0) {dispatch({ type: 'NUMBER_LIST', numberList: res.data })} })} }@connect(state => state.isNumber, // 如果有多個reducer: state => ({ ..state.isNumber, ...state.someName }){ fetchNumberList } // 一些之前寫好的action方法 ) class IndustryManagement extends Component {constructor(props) {super(props)this.state= {industryNumber: this.props.industryNumber && this.props.industryNumber[0], // 直接props引用redux的state }}btnChange() {this.props.fetchNumberList() //經過裝飾器的函數都可用props引用 }render() {return (<button onClick={ this.btnChange.bind(this) }>)} }

?二.?mobx

這里推薦使用mobx-state-tree的寫法,有興趣的可去github上看用法,以下是傳統寫法:

store.js文件: import { observable, action, runInAction } from 'mobx' // runInAction接受異步action class RootStore { @observable userInfo = null //注冊變量并監視變化(可以是引用類型值或者普通值)
@observable number1 = 1
@observable number2 = 2
@computed getTotal(){
return this.number1 + this.number2 // 每當監視數據發生變化就會執行@computed
} @action.bound getData= async() => { // bound是為了綁定this上下文(箭頭函數可不需要)let res = await get('接口地址')if (res.success) {runInAction(() => { // runInAction函數可異步修改@observable數據this.userInfo = res.data})}} } export default rootStore = new RootStore()

index.js入口文件:

import { Provider } from 'mobx-react' // 與上文的redux的Provider相似 import rootStore from './store' ReactDOM.render(<Provider rootStore={rootStore}> <MainRouter /> </Provider>,document.getElementById('root'))

某子組件:

import { observer, inject } from 'mobx-react' @inject(({store, otherStore}) => ({ // 選擇注入store(如果有多個store),如果不用inject函數可直接import store from '../store',組件中直接store.userInfo使用
userInfo: store.userInfo,
total: store.getTotal
})) @observer class EmpRec extends Component {constructor(props) {super(props)}render() {
return(<div>this.props.userInfo</div>
      <div>this.props.total</div> // 3
)
}
}

?對比下來感覺mobx比redux好用(逃~)

轉載于:https://www.cnblogs.com/xiaoxiao666/p/8873552.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的redux VS mobx (装饰器配合使用)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。