亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

詳解在React里使用"Vuex"

2024-05-06 16:43:31
字體:
來源:轉載
供稿:網友

一直是Redux的死忠黨,但使用過Vuex后,感嘆于Vuex上手之快,于是萌生了寫一個能在React里使用的類Vuex庫,暫時取名 Ruex 。

如何使用

一:創建Store實例:

與vuex一樣,使用單一狀態樹(一個對象)包含全部的應用層級狀態(store)。

store可配置state,mutations,actions和modules屬性:

  1. state :存放數據
  2. mutations :更改state的唯一方法是提交 mutation
  3. actions :Action 提交的是 mutation,而不是直接變更狀態。Action 可以包含任意異步操作,觸發mutation,觸發其他actions。

支持中間件:中間件會在每次mutation觸發前后執行。

store.js:

import {createStore} from 'ruex'const state = { total_num:1111,}const mutations = { add(state,payload){ state.total_num += payload }, double(state,payload){ state.total_num = state.total_num*payload },}const actions = { addAsync({state,commit,rootState,dispatch},payload){ setTimeout(()=>{ commit('add',payload) },1000) }, addPromise({state,commit,rootState,dispatch},payload){ return fetch('https://api.github.com/search/users?q=haha').then(res=>res.json()) .then(res=>{ commit('add',1) dispatch('addAsync',1) }) }, doubleAsync({state,commit,rootState,dispatch},payload){ setTimeout(()=>{ commit('double',2) },1000) }, doublePromise({state,commit,rootState,dispatch},payload){ return fetch('https://api.github.com/search/users?q=haha').then(res=>res.json()) .then(res=>{ commit('double',2) dispatch('doubleAsync',2) }) },}// middlewareconst logger = (store) => (next) => (mutation,payload) =>{ console.group('before emit mutation ',store.getState()) let result = next(mutation,payload) console.log('after emit mutation', store.getState()) console.groupEnd()}// create store instanceconst store = createStore({ state, mutations, actions,},[logger])export default store

將Store實例綁定到組件上

ruex提供Provider方便store實例注冊到全局context上。類似react-redux的方式。

App.js:

import React from 'react'import {Provider} from 'ruex'import store from './store.js'class App extends React.Component{ render(){ return (  <Provider store={store} >  <Child1/>  </Provider> ) }}

使用或修改store上數據

store綁定完成后,在組件中就可以使用state上的數據,并且可以通過觸發mutation或action修改state。具體的方式參考react-redux的綁定方式:使用connect高階組件。

Child1.js:

import React, {PureComponent} from 'react'import {connect} from 'ruex'class Chlid1 extends PureComponent { state = {} constructor(props) { super(props); } render() { const { total_num, } = this.props return ( <div className=''> <div className=""> total_num: {total_num} </div> <button onClick={this.props.add.bind(this,1)}>mutation:add</button> <button onClick={this.props.addAsync.bind(this,1)}>action:addAsync</button> <button onClick={this.props.addPromise.bind(this,1)}>action:addPromise</button> <br /> <button onClick={this.props.double.bind(this,2)}>mutation:double</button> <button onClick={this.props.doubleAsync.bind(this,2)}>action:doubleAsync</button> <button onClick={this.props.doublePromise.bind(this,2)}>action:doublePromise</button> </div>) }}const mapStateToProps = (state) => ({ total_num:state.total_num,})const mapMutationsToProps = ['add','double']const mapActionsToProps = ['addAsync','addPromise','doubleAsync','doublePromise']export default connect( mapStateToProps, mapMutationsToProps, mapActionsToProps,)(Chlid1)

API:

  1. mapStateToProps :將state上的數據綁定到當前組件的props上。
  2. mapMutationsToProps : 將mutation綁定到props上。例如:調用時通過this.props.add(data)的方式即可觸發mutation,data參數會被mutaion的payload參數接收。
  3. mapActionsToProps : 將action綁定到props上。

內部實現

ruex內部使用immer維護store狀態更新,因此在mutation中,可以通過直接修改對象的屬性更改狀態,而不需要返回一個新的對象。例如:

const state = { obj:{ name:'aaaa' }}const mutations = { changeName(state,payload){ state.obj.name = 'bbbb' // instead of  // state.obj = {name:'bbbb'} },}

支持modules(暫不支持namespace)

支持中間件。注:actions已實現類似redux-thunk的功能

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产一区二区三区在线观看视频| 国产色婷婷国产综合在线理论片a| 欧美视频专区一二在线观看| 66m—66摸成人免费视频| 日韩中文字幕精品视频| 欧美主播福利视频| 日韩综合视频在线观看| 国产精品久久久久久久久粉嫩av| 俺去啦;欧美日韩| 国产精品入口日韩视频大尺度| 国产亚洲精品美女久久久| 欧美成人在线网站| 91久久国产婷婷一区二区| 亚洲国产中文字幕在线观看| 亚洲国产精品网站| 超碰91人人草人人干| 久久综合伊人77777尤物| 2019精品视频| 亚洲成人精品久久久| 国产精品一区二区久久久| 日本91av在线播放| 亚洲最新视频在线| 久久亚洲国产精品成人av秋霞| 91精品久久久久久综合乱菊| 欧美视频在线免费看| 欧美性高潮在线| 亚洲欧洲一区二区三区在线观看| 欧美在线视频a| 日韩高清免费观看| 欧美性极品少妇精品网站| 精品国产一区二区三区久久狼黑人| 91综合免费在线| 国产一区二区黑人欧美xxxx| 久久综合五月天| 亚洲成人免费网站| 久久夜色精品国产| 精品成人国产在线观看男人呻吟| 最近2019年中文视频免费在线观看| 日韩中文字幕精品视频| 欧美床上激情在线观看| 亚洲激情在线观看| 国内揄拍国内精品少妇国语| 国产婷婷97碰碰久久人人蜜臀| 欧美激情按摩在线| 国产精品美女在线观看| 美女国内精品自产拍在线播放| 日韩精品在线观| 欧美成人黑人xx视频免费观看| 欧美性xxxx在线播放| 国产成人精品国内自产拍免费看| 国产成人精品免费久久久久| 欧美视频国产精品| 欧美亚洲国产日本| 国产一区二区三区在线观看视频| 97碰碰碰免费色视频| 成人黄色在线观看| 欧美大片在线影院| 亚洲一区二区在线| 亚洲成人亚洲激情| 欧美日韩亚洲视频一区| 成人性生交大片免费看视频直播| 欧美成人午夜剧场免费观看| 色妞色视频一区二区三区四区| 国产精品h在线观看| 成人妇女淫片aaaa视频| 45www国产精品网站| 88国产精品欧美一区二区三区| 国产精品视频永久免费播放| 国产在线久久久| 亚洲黄色av女优在线观看| 国模精品视频一区二区三区| 欧美另类xxx| 秋霞av国产精品一区| 亚洲精品乱码久久久久久金桔影视| 亚洲欧美三级在线| 欧美又大粗又爽又黄大片视频| 精品久久久久久国产91| 日韩精品免费综合视频在线播放| 色综合久久88| 95av在线视频| 久久99国产综合精品女同| 91国偷自产一区二区三区的观看方式| 亚洲黄色有码视频| 国产精品久久久久久亚洲影视| 亚洲夜晚福利在线观看| 日韩小视频网址| 亚洲精品网站在线播放gif| 日韩精品视频在线免费观看| 成人xvideos免费视频| 亚州成人av在线| 日韩精品中文字幕在线播放| 欧美日韩加勒比精品一区| 日韩视频中文字幕| 国产欧美va欧美va香蕉在线| 亚洲国产精品福利| 91免费精品视频| 国产精品欧美亚洲777777| 自拍偷拍免费精品| 一本大道香蕉久在线播放29| 亚洲视频在线观看免费| 亚洲自拍欧美色图| 国产精品88a∨| 欧美高清视频一区二区| 国产精品91在线观看| 亚洲精品自产拍| 欧美中文在线视频| 亚洲美女中文字幕| 欧美精品在线第一页| 国产精品美女久久| 国产欧美精品日韩精品| 国产成人精品视| 成人黄色网免费| 亚洲欧美另类在线观看| 亚洲精品第一国产综合精品| 亚洲成人激情在线观看| 国产成一区二区| 操日韩av在线电影| 精品精品国产国产自在线| yw.139尤物在线精品视频| 国产精品视频一区国模私拍| 欧美精品激情在线| 欧美成人激情视频免费观看| 国产精品三级网站| 亚洲精品成人久久电影| 国产精品视频自拍| 国产99久久精品一区二区永久免费| 欧美黑人性生活视频| 久久国产精品视频| 成人两性免费视频| 青青草精品毛片| 最近2019中文字幕mv免费看| 91色中文字幕| 国产精品视频成人| 亚洲成人网久久久| 亚洲一区二区三区四区视频| 91po在线观看91精品国产性色| 成人精品在线观看| 91久久国产精品91久久性色| 亚洲国产天堂网精品网站| 成人a免费视频| 91久久久久久久一区二区| 91亚洲国产精品| 欧美性受xxxx黑人猛交| 欧美夫妻性生活xx| 日韩日本欧美亚洲| 麻豆国产va免费精品高清在线| 疯狂做受xxxx欧美肥白少妇| 成人中文字幕在线观看| 亚洲xxx自由成熟| 亚洲免费精彩视频| 欧美巨大黑人极品精男| 欧美激情视频免费观看| 欧美第一页在线| 国产精品一香蕉国产线看观看| 国产精品入口夜色视频大尺度| 欧美黑人性猛交| 亚洲精品自拍第一页| 国产精品美女主播在线观看纯欲| 日韩电影在线观看永久视频免费网站| 国产盗摄xxxx视频xxx69| 亚洲人成毛片在线播放| 久久久久久综合网天天| 国产伦精品一区二区三区精品视频| 国产精品福利观看|