摘要:簡(jiǎn)介是一個(gè)獨(dú)立專門用于做狀態(tài)管理的庫不是插件庫它可以用在等項(xiàng)目中但演變至今基本與配合使用作用集中式管理應(yīng)用中多個(gè)組件共享的狀態(tài)如果不是比較復(fù)雜的組件間通信的情況下建議還是不使用因?yàn)闀?huì)造成代碼量的上升和復(fù)雜關(guān)鍵模塊保存狀態(tài)的主要部分共享的狀態(tài)
簡(jiǎn)介
1) redux是一個(gè)獨(dú)立專門用于做狀態(tài)管理的JS庫(不是react插件庫)
2) 它可以用在react, angular, vue等項(xiàng)目中, 但演變至今基本與react配合使用
3) 作用: 集中式管理react應(yīng)用中多個(gè)組件共享的狀態(tài)
Tip:redux如果不是比較復(fù)雜的組件間通信的情況下,建議還是不使用,因?yàn)闀?huì)造成代碼量的上升和復(fù)雜
關(guān)鍵模塊Store
保存狀態(tài)的主要部分,共享的狀態(tài)數(shù)據(jù)保存在該對(duì)象中
Action Creators
工廠函數(shù),主要用來生成action對(duì)象,傳輸更新的狀態(tài)數(shù)據(jù).
Reducers
接收action對(duì)象,對(duì)之前的狀態(tài)和action中的新狀態(tài)進(jìn)行操作,并且返回新的結(jié)果存在store中.
關(guān)鍵函數(shù)store.createStore()
創(chuàng)建store對(duì)象,參數(shù)傳入reducers進(jìn)行綁定.
store.dispatch()
分發(fā)action對(duì)象,傳入reducers,進(jìn)行狀態(tài)的更新.
store.subscribe()
監(jiān)聽事件,當(dāng)有狀態(tài)改變時(shí),會(huì)自動(dòng)調(diào)用監(jiān)聽的方法(一般用來重新渲染方法)
使用示例 1.下載安裝//此處我使用的是yarn,后面兩個(gè)后面介紹 yarn add redux react-redux redux-thunk2.創(chuàng)建文件目錄 3.各部分內(nèi)容
store.js
import { createStore,applyMiddleware } from "redux" import reducer from "./reducer" //導(dǎo)入reducer進(jìn)行綁定 import thunk from "redux-thunk" //這是一個(gè)異步解析實(shí)現(xiàn) export default createStore(reducer,applyMiddleware(thunk)); // 導(dǎo)出store對(duì)象
action-creator.js
import { INCREASE, DECREASE } from "./action-type" //全局命名聲明文件 // 不同的操作,返回action對(duì)象,type為標(biāo)識(shí),data為傳輸?shù)臄?shù)據(jù) export const incresement = (data) => ({ type:INCREASE,data:data}) export const decresement = (data) =>({type:DECREASE,data:data}) //模擬異步操作,返回的是主動(dòng)進(jìn)行分發(fā)操作的一個(gè)函數(shù) export const incresementAsync = (data) => { return (dispatch) => { setTimeout(()=>{ dispatch(incresement(data)) },1000) } }
reducer.js
import {INCREASE,DECREASE} from "./action-type" //當(dāng)有dispatch被調(diào)用時(shí),會(huì)自動(dòng)來遍歷該模塊中的所有函數(shù),并進(jìn)行匹配. //previousState為之前的狀態(tài),action中包含著新的數(shù)據(jù) export default function number(previousState = 0,action) { switch(action.type){ case INCREASE: return previousState + action.data; case DECREASE: return previousState - action.data; default: return previousState; } }
action-type.js
//聲明定義了一些命名 export const INCREASE = "INCREASE"; export const DECREASE = "DECREASE";
App.js
import React, { Component } from "react" import { connect } from "react-redux" import { incresement, decresement,incresementAsync } from "./redux/action-creator" class App extends Component { // 進(jìn)行更新操作 increase = () => { this.props.incresement(1) } decrease = () => { this.props.decresement(1) } increaseAsync = () => { this.props.incresementAsync(1) } render() { return (//獲取狀態(tài)值) } } //關(guān)鍵在這里,這是簡(jiǎn)寫的方式. //得益于react-redux,將創(chuàng)建action對(duì)象和dispatch的操作都進(jìn)行了封裝簡(jiǎn)化,并且封裝了獲取狀態(tài)值. //不管是進(jìn)行獲取還是更新操作,都封裝進(jìn)了props屬性中. export default connect( (state) => ({ number: state }), { incresement, decresement,incresementAsync } )(App)click {this.props.number} times
index.js
import React from "react"; import ReactDOM from "react-dom"; import { Provider } from "react-redux" import store from "./redux/store" import App from "./App"; // 用Provider包裝,就省略了用subscribe()監(jiān)聽的回調(diào). ReactDOM.render(react-redux, document.getElementById("root"));
專門用來簡(jiǎn)化redux在react中使用的一個(gè)庫.
它將原生redux的.getState(),創(chuàng)建action對(duì)象,dispatch等方法進(jìn)行了封裝.提供如上代碼的簡(jiǎn)寫方式.
用來幫助解析異步操作.
只需要在創(chuàng)建store對(duì)象的時(shí)候用中間件包裝的方式作為第二個(gè)參數(shù)傳入即可.
redux-devtools-extension.
在谷歌商店中裝好這個(gè)插件,然后在創(chuàng)建store對(duì)象的時(shí)候
import { createStore, applyMiddleware } from "redux"; import { composeWithDevTools } from "redux-devtools-extension"; const store = createStore(reducer, composeWithDevTools( applyMiddleware(...middleware), // other store enhancers if any ));總結(jié)
redux在復(fù)雜項(xiàng)目中比較適合使用.它保存著一些多處需要共享的狀態(tài)數(shù)據(jù),在整個(gè)項(xiàng)目中比較方便進(jìn)行狀態(tài)數(shù)據(jù)的更新以及獲取.
避免了一些層級(jí)比較多或者跨越了比較多級(jí)的同級(jí)兄弟組件需要互相通信的復(fù)雜過程.
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/103668.html
摘要:更多參考通過庫掌握函數(shù)組件有些時(shí)候,我們想要?jiǎng)討B(tài)的加載一些組件按需加載,比如在一個(gè)單頁面應(yīng)用中頁面的組件頁面的組件頁面的組件只有真正要實(shí)例化當(dāng)前頁面的時(shí)候,才會(huì)去加載相應(yīng)的組件。 react 前端項(xiàng)目技術(shù)選型、開發(fā)工具、周邊生態(tài) 聲明:這不是一篇介紹 React 基礎(chǔ)知識(shí)的文章,需要熟悉 React 相關(guān)知識(shí) 主架構(gòu):react, react-router, redux, redux...
摘要:更多參考通過庫掌握函數(shù)組件有些時(shí)候,我們想要?jiǎng)討B(tài)的加載一些組件按需加載,比如在一個(gè)單頁面應(yīng)用中頁面的組件頁面的組件頁面的組件只有真正要實(shí)例化當(dāng)前頁面的時(shí)候,才會(huì)去加載相應(yīng)的組件。 react 前端項(xiàng)目技術(shù)選型、開發(fā)工具、周邊生態(tài) 聲明:這不是一篇介紹 React 基礎(chǔ)知識(shí)的文章,需要熟悉 React 相關(guān)知識(shí) 主架構(gòu):react, react-router, redux, redux...
摘要:屬性是必須的。需要一個(gè)與的一致。必須在的返回原。調(diào)試插件日志安裝組件。然后加入到中即可例如擴(kuò)展程序需要在應(yīng)用市場(chǎng)安裝然后在中使用增強(qiáng)功能將加入即可在線實(shí)例推薦閱讀手稿 React-Redux Redux Action function addTodo(text) { return { type: ADD_TODO, text } } type 屬性是必須的。...
摘要:主要用于構(gòu)建,被認(rèn)為是中的視圖。高效通過對(duì)的模擬,最大限度地減少與的交互。也就是說,用戶負(fù)責(zé)視覺層,狀態(tài)管理則是全部交給它。該回調(diào)函數(shù)必須返回一個(gè)純對(duì)象,這個(gè)對(duì)象會(huì)與組件的合并。 React 定義: React 是一個(gè)用于構(gòu)建用戶界面的 JAVASCRIPT 庫。React主要用于構(gòu)建UI,React 被認(rèn)為是 MVC 中的 V(視圖)。 特點(diǎn): 聲明式設(shè)計(jì) ?React采用聲明范式...
摘要:描述和之間沒有關(guān)系。但是還是比較適合和搭配的,因?yàn)樵试S你以的形式來描述界面,而非常擅長控制的變化。應(yīng)用中應(yīng)有且僅有一個(gè)。只需要在渲染根組件時(shí)使用即可。創(chuàng)建上一篇開發(fā)教程九基礎(chǔ) 描述 Redux 和 React 之間沒有關(guān)系。Redux 可以搭配 React、Angular 甚至純 JS。但是 Redux 還是比較適合和 React 搭配的,因?yàn)?React 允許你以 state 的形式...
閱讀 2953·2021-11-11 16:55
閱讀 514·2021-09-27 13:36
閱讀 1072·2021-09-22 15:35
閱讀 2907·2019-08-30 12:46
閱讀 3125·2019-08-26 17:02
閱讀 1826·2019-08-26 11:56
閱讀 1295·2019-08-26 11:47
閱讀 423·2019-08-23 17:01