最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)文章

  • antd4里table滾動的實現(xiàn)

    antd4里table滾動的實現(xiàn)

    本文主要介紹了antd4里table滾動的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • React useContext與useReducer函數(shù)組件使用

    React useContext與useReducer函數(shù)組件使用

    useContext和useReducer 可以用來減少層級使用, useContext,可以理解為供貨商提供一個公共的共享值,然后下面的消費者去接受共享值,只有一個供貨商,而有多個消費者,可以達到共享的狀態(tài)改變的目的
    2023-02-02
  • React使用Hooks從服務端獲取數(shù)據(jù)的完整指南

    React使用Hooks從服務端獲取數(shù)據(jù)的完整指南

    本文將從基礎(chǔ)到高級用法,詳細介紹如何在 React 項目中優(yōu)雅地使用 Hooks 進行服務端數(shù)據(jù)獲取,涵蓋錯誤處理、加載狀態(tài)、性能優(yōu)化等核心場景,并提供可直接復用的代碼模板,需要的朋友可以參考下
    2025-03-03
  • React文件名和目錄規(guī)范最佳實踐記錄(總結(jié)篇)

    React文件名和目錄規(guī)范最佳實踐記錄(總結(jié)篇)

    React在使用時非常靈活,如果沒有一個規(guī)范約束項目,在開發(fā)過程中會非?;靵y,本文將介紹幾個優(yōu)秀的規(guī)范,介紹文件名和目錄前,需要先簡述一下幾種通用的類型,用來區(qū)分文件的功能,感興趣的朋友一起看看吧
    2022-05-05
  • reactrouter dom庫作用小結(jié)

    reactrouter dom庫作用小結(jié)

    `react-router-dom`是React應用中用于實現(xiàn)頁面導航、嵌套路由、布局管理以及代碼分割和懶加載的重要庫,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-11-11
  • React實現(xiàn)歌詞滾動效果(跟隨音樂播放時間滾動)

    React實現(xiàn)歌詞滾動效果(跟隨音樂播放時間滾動)

    這篇文章主要為大家詳細介紹了React實現(xiàn)歌詞滾動效果(跟隨音樂播放使勁按滾動),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2024-02-02
  • react-router-domV6版本的路由和嵌套路由寫法詳解

    react-router-domV6版本的路由和嵌套路由寫法詳解

    本文主要介紹了react-router-domV6版本的路由和嵌套路由寫法詳解,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 淺談React Native 傳參的幾種方式(小結(jié))

    淺談React Native 傳參的幾種方式(小結(jié))

    這篇文章主要介紹了淺談React Native 傳參的幾種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • 詳解如何在React中監(jiān)聽鼠標事件

    詳解如何在React中監(jiān)聽鼠標事件

    React可以通過使用React事件系統(tǒng)來監(jiān)聽鼠標事件,您可以在React組件中通過使用特定的事件處理函數(shù)來注冊和處理鼠標事件,本文小編講給大家詳細介紹一下如何在React中監(jiān)聽鼠標事件,需要的朋友可以參考下
    2023-09-09
  • 如何使用 React Router v6 在 React 中實現(xiàn)面包屑

    如何使用 React Router v6 在 React 中

    面包屑在網(wǎng)頁開發(fā)中的角色不可忽視,它們?yōu)橛脩籼峁┝艘环N跟蹤其在網(wǎng)頁中當前位置的方法,并有助于網(wǎng)頁導航,本文介紹了如何使用react-router v6和bootstrap在react中實現(xiàn)面包屑,感興趣的朋友一起看看吧
    2024-09-09

最新評論

漠河县| 梁平县| 韶山市| 余庆县| 花莲市| 南汇区| 锦州市| 河东区| 新巴尔虎右旗| 武邑县| 昌黎县| 怀来县| 花莲县| 绥阳县| 沂水县| 突泉县| 正宁县| 拉萨市| 囊谦县| 乌什县| 临颍县| 满洲里市| 车致| 常州市| 海晏县| 金阳县| 太康县| 徐汇区| 易门县| 武城县| 甘德县| 集安市| 县级市| 平和县| 仪陇县| 北京市| 天长市| 盈江县| 星子县| 乐业县| 汽车|