欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

redux工作原理講解及使用方法

 更新時間:2021年11月29日 14:10:52   作者:Et2nity  
這篇文章主要介紹了redux工作原理講解及使用方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

1. redux 是什么?

React 只是 DOM 的一個抽象層,并不是 Web 應用的完整解決方案。react只是一個輕量級的視圖層框架,如果要做大型應用就要搭配視圖層框架redux一起使用。主要引用于多交互、多數(shù)據(jù)源的場景,并不是必須使用,但是必須要會。

2.redux的原理

redux的原理,首先用一張圖來說明,很容易理解

首先,用戶發(fā)出 Action。

store.dispatch(action);

然后,Store 自動調(diào)用 Reducer,并且傳入兩個參數(shù):當前 State 和收到的 Action。 Reducer 會返回新的 State 。

let nextState = todoApp(previousState, action);

State 一旦有變化,Store 就會調(diào)用監(jiān)聽函數(shù)。

// 設置監(jiān)聽函數(shù)
store.subscribe(listener);

listener可以通過store.getState()得到當前狀態(tài)。如果使用的是 React,這時可以觸發(fā)重新渲染 View。

function listerner() {
  let newState = store.getState();
  component.setState(newState);   
}

3. 如何使用 redux?

(1).安裝redux,創(chuàng)建redux文件夾,建立store.js

該文件專門用于暴露一個store對象,整個應用只有一個store對象

安裝redux:yarn add redux / npm install redux

//引入createStore,專門用于創(chuàng)建redux中最為核心的store對象
import {createStore,applyMiddleware} from 'redux'
//引入為Count組件服務的reducer
import countReducer from './count_reducer'
//引入redux-thunk,用于支持異步action
import thunk from 'redux-thunk'
//暴露store  
//applyMiddleware 是中間位 中使用thunk
export default createStore(countReducer,applyMiddleware(thunk))

(2).建立reducers.js

  • 1.該文件是用于創(chuàng)建一個為Count組件服務的reducer,reducer的本質(zhì)就是一個函數(shù)
  • 2.reducer函數(shù)會接到兩個參數(shù),分別為:之前的狀態(tài)(preState),動作對象(action)
const initState = 0 //初始化狀態(tài)
export default function countReducer(preState=initState,action){
	// console.log(preState);
	//從action對象中獲?。簍ype、data
	const {type,data} = action
	//根據(jù)type決定如何加工數(shù)據(jù)
	switch (type) {
		case 'increment': //如果是加
			return preState + data
		case 'decrement': //若果是減
			return preState - data
		default:
			return preState
	}
}

(3).引入store.subscribe

主要用subscribe監(jiān)聽store中每次修改情況

// 公共 index.js
import store from './redux/store'

//subscribe當store中數(shù)據(jù)發(fā)生變化就會更新數(shù)據(jù),寫在這里是讓全局擁有
store.subscribe(()=>{
	ReactDOM.render(<App/>,document.getElementById('root'))
})

(4). 引入react-redux

react-redux是redux作者封裝的一個庫,是第三方模塊,對Redux進一步簡化,提供了一些額外的API(例如:Provider,connect等),使用它可以更好的組織和管理我們的代碼,在React中更方便的使用Redux。

下載 react-redux

創(chuàng)建count 文件

//引入Count的UI組件
import CountUI from '../../components/Count'

//引入connect用于連接UI組件與redux
import {connect} from 'react-redux'

-------------------------------------------------------------
/* 
	1.mapStateToProps函數(shù)返回的是一個對象;
	2.返回的對象中的key就作為傳遞給UI組件props的key,value就作為傳遞給UI組件props的value
	3.mapStateToProps用于傳遞狀態(tài)
*/
function mapStateToProps(state){
	return {count:state}
}
-----------------------------------------------------------------
/* 
	1.mapDispatchToProps函數(shù)返回的是一個對象;
	2.返回的對象中的key就作為傳遞給UI組件props的key,value就作為傳遞給UI組件props的value
	3.mapDispatchToProps用于傳遞操作狀態(tài)的方法
*/
function mapDispatchToProps(dispatch){
	return {
		jia:number => dispatch(createIncrementAction(number)),
		jian:number => dispatch(createDecrementAction(number)),
		jiaAsync:(number,time) => dispatch(createIncrementAsyncAction(number,time)),
	}
}
//使用connect()()創(chuàng)建并暴露一個Count的容器組件
export default connect(mapStateToProps,mapDispatchToProps)(CountUI)
//改良
export default connect(
	state => ({count:state}),
	
	//mapDispatchToProps的一般寫法
	/* dispatch => ({
		jia:number => dispatch(createIncrementAction(number)),
		jian:number => dispatch(createDecrementAction(number)),
		jiaAsync:(number,time) => dispatch(createIncrementAsyncAction(number,time)),
	}) */

	//mapDispatchToProps的簡寫
	{
		jia:createIncrementAction,
		jian:createDecrementAction,
		jiaAsync:createIncrementAsyncAction,
	}
)(Count)


生成action對象,并分別暴露

/* 
	該文件專門為Count組件生成action對象
*/
import {INCREMENT,DECREMENT} from '../constant'

//同步action,就是指action的值為Object類型的一般對象
export const increment = data => ({type:INCREMENT,data})
export const decrement = data => ({type:DECREMENT,data})

//異步action,就是指action的值為函數(shù),異步action中一般都會調(diào)用同步action,異步action不是必須要用的。
export const incrementAsync = (data,time) => {
	return (dispatch)=>{
		setTimeout(()=>{
			dispatch(increment(data))
		},time)
	}
}

到此這篇關(guān)于redux工作原理講解及使用方法的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • react 組件實現(xiàn)無縫輪播示例詳解

    react 組件實現(xiàn)無縫輪播示例詳解

    這篇文章主要為大家介紹了react 組件實現(xiàn)無縫輪播示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • 在React中編寫樣式的六種方式

    在React中編寫樣式的六種方式

    在React中,編寫樣式主要有以下幾種方式,內(nèi)聯(lián)樣式,外部樣式表,CSS Modules,Styled Components,Emotion和Radium這六種樣式,下面我將針對上面提到的6種方式給出詳細的代碼示例,需要的朋友可以參考下
    2024-01-01
  • React自定義Hook-useForkRef的具體使用

    React自定義Hook-useForkRef的具體使用

    本文主要介紹了React自定義Hook-useForkRef的具體使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Remix路由模塊輸出對象loader函數(shù)詳解

    Remix路由模塊輸出對象loader函數(shù)詳解

    這篇文章主要為大家介紹了Remix路由模塊輸出對象loader函數(shù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪<BR>
    2023-04-04
  • React + webpack 環(huán)境配置的方法步驟

    React + webpack 環(huán)境配置的方法步驟

    本篇文章主要介紹了React + webpack 環(huán)境配置的方法步驟,詳解的介紹了開發(fā)環(huán)境的配置搭建,有興趣的可以了解一下
    2017-09-09
  • ReactNative實現(xiàn)弧形拖動條的代碼案例

    ReactNative實現(xiàn)弧形拖動條的代碼案例

    本文介紹了ReactNative實現(xiàn)弧形拖動條,本組件使用到了react-native-svg和PanResponder,結(jié)合示例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • 詳解React項目的服務端渲染改造(koa2+webpack3.11)

    詳解React項目的服務端渲染改造(koa2+webpack3.11)

    本篇文章主要介紹了詳解React項目的服務端渲染改造(koa2+webpack3.11),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • React中使用antd組件的方法

    React中使用antd組件的方法

    antd?是基于?Ant?Design?設計體系的?React?UI?組件庫,主要用于研發(fā)企業(yè)級中后臺產(chǎn)品,這篇文章主要介紹了React中使用antd組件,需要的朋友可以參考下
    2022-09-09
  • 使用react-virtualized實現(xiàn)圖片動態(tài)高度長列表的問題

    使用react-virtualized實現(xiàn)圖片動態(tài)高度長列表的問題

    一般我們在寫react項目中,同時渲染很多dom節(jié)點,會造成頁面卡頓, 空白的情況。為了解決這個問題,今天小編給大家分享一篇教程關(guān)于react-virtualized實現(xiàn)圖片動態(tài)高度長列表的問題,感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • react build 后打包發(fā)布總結(jié)

    react build 后打包發(fā)布總結(jié)

    這篇文章主要介紹了react build 后打包發(fā)布總結(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08

最新評論