成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

「 React 」redux

kevin / 432人閱讀

摘要:簡介是一個獨(dú)立專門用于做狀態(tài)管理的庫不是插件庫它可以用在等項(xiàng)目中但演變至今基本與配合使用作用集中式管理應(yīng)用中多個組件共享的狀態(tài)如果不是比較復(fù)雜的組件間通信的情況下建議還是不使用因?yàn)闀斐纱a量的上升和復(fù)雜關(guān)鍵模塊保存狀態(tài)的主要部分共享的狀態(tài)

簡介

1) redux是一個獨(dú)立專門用于做狀態(tài)管理的JS庫(不是react插件庫)
2) 它可以用在react, angular, vue等項(xiàng)目中, 但演變至今基本與react配合使用
3) 作用: 集中式管理react應(yīng)用中多個組件共享的狀態(tài)

Tip:redux如果不是比較復(fù)雜的組件間通信的情況下,建議還是不使用,因?yàn)闀斐纱a量的上升和復(fù)雜

關(guān)鍵模塊

Store

保存狀態(tài)的主要部分,共享的狀態(tài)數(shù)據(jù)保存在該對象中

Action Creators

工廠函數(shù),主要用來生成action對象,傳輸更新的狀態(tài)數(shù)據(jù).

Reducers

接收action對象,對之前的狀態(tài)和action中的新狀態(tài)進(jìn)行操作,并且返回新的結(jié)果存在store中.

關(guān)鍵函數(shù)

store.createStore()

創(chuàng)建store對象,參數(shù)傳入reducers進(jìn)行綁定.

store.dispatch()

分發(fā)action對象,傳入reducers,進(jìn)行狀態(tài)的更新.

store.subscribe()

監(jiān)聽事件,當(dāng)有狀態(tài)改變時,會自動調(diào)用監(jiān)聽的方法(一般用來重新渲染方法)

使用示例 1.下載安裝
//此處我使用的是yarn,后面兩個后面介紹
yarn add redux  react-redux  redux-thunk
2.創(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"    //這是一個異步解析實(shí)現(xiàn)

export default createStore(reducer,applyMiddleware(thunk)); // 導(dǎo)出store對象

action-creator.js

import { INCREASE, DECREASE } from "./action-type"  //全局命名聲明文件

// 不同的操作,返回action對象,type為標(biāo)識,data為傳輸?shù)臄?shù)據(jù)
export const incresement = (data) => ({ type:INCREASE,data:data})  

export const decresement = (data) =>({type:DECREASE,data:data})

//模擬異步操作,返回的是主動進(jìn)行分發(fā)操作的一個函數(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ù),并進(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)值

click {this.props.number} times

) } } //關(guān)鍵在這里,這是簡寫的方式. //得益于react-redux,將創(chuàng)建action對象和dispatch的操作都進(jìn)行了封裝簡化,并且封裝了獲取狀態(tài)值. //不管是進(jìn)行獲取還是更新操作,都封裝進(jìn)了props屬性中. export default connect( (state) => ({ number: state }), { incresement, decresement,incresementAsync } )(App)

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(, document.getElementById("root"));
react-redux

專門用來簡化redux在react中使用的一個庫.
它將原生redux的.getState(),創(chuàng)建action對象,dispatch等方法進(jìn)行了封裝.提供如上代碼的簡寫方式.

redux-thunk

用來幫助解析異步操作.
只需要在創(chuàng)建store對象的時候用中間件包裝的方式作為第二個參數(shù)傳入即可.

擴(kuò)展調(diào)試工具

redux-devtools-extension.

在谷歌商店中裝好這個插件,然后在創(chuàng)建store對象的時候

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ù),在整個項(xiàng)目中比較方便進(jìn)行狀態(tài)數(shù)據(jù)的更新以及獲取.

避免了一些層級比較多或者跨越了比較多級的同級兄弟組件需要互相通信的復(fù)雜過程.

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/103668.html

相關(guān)文章

  • react 前端項(xiàng)目技術(shù)選型、開發(fā)工具、周邊生態(tài)

    摘要:更多參考通過庫掌握函數(shù)組件有些時候,我們想要動態(tài)的加載一些組件按需加載,比如在一個單頁面應(yīng)用中頁面的組件頁面的組件頁面的組件只有真正要實(shí)例化當(dāng)前頁面的時候,才會去加載相應(yīng)的組件。 react 前端項(xiàng)目技術(shù)選型、開發(fā)工具、周邊生態(tài) 聲明:這不是一篇介紹 React 基礎(chǔ)知識的文章,需要熟悉 React 相關(guān)知識 主架構(gòu):react, react-router, redux, redux...

    hersion 評論0 收藏0
  • react 前端項(xiàng)目技術(shù)選型、開發(fā)工具、周邊生態(tài)

    摘要:更多參考通過庫掌握函數(shù)組件有些時候,我們想要動態(tài)的加載一些組件按需加載,比如在一個單頁面應(yīng)用中頁面的組件頁面的組件頁面的組件只有真正要實(shí)例化當(dāng)前頁面的時候,才會去加載相應(yīng)的組件。 react 前端項(xiàng)目技術(shù)選型、開發(fā)工具、周邊生態(tài) 聲明:這不是一篇介紹 React 基礎(chǔ)知識的文章,需要熟悉 React 相關(guān)知識 主架構(gòu):react, react-router, redux, redux...

    kidsamong 評論0 收藏0
  • React手稿之 React-Redux

    摘要:屬性是必須的。需要一個與的一致。必須在的返回原。調(diào)試插件日志安裝組件。然后加入到中即可例如擴(kuò)展程序需要在應(yīng)用市場安裝然后在中使用增強(qiáng)功能將加入即可在線實(shí)例推薦閱讀手稿 React-Redux Redux Action function addTodo(text) { return { type: ADD_TODO, text } } type 屬性是必須的。...

    Freelander 評論0 收藏0
  • react-redux

    摘要:主要用于構(gòu)建,被認(rèn)為是中的視圖。高效通過對的模擬,最大限度地減少與的交互。也就是說,用戶負(fù)責(zé)視覺層,狀態(tài)管理則是全部交給它。該回調(diào)函數(shù)必須返回一個純對象,這個對象會與組件的合并。 React 定義: React 是一個用于構(gòu)建用戶界面的 JAVASCRIPT 庫。React主要用于構(gòu)建UI,React 被認(rèn)為是 MVC 中的 V(視圖)。 特點(diǎn): 聲明式設(shè)計(jì) ?React采用聲明范式...

    sanyang 評論0 收藏0
  • react開發(fā)教程(十)redux結(jié)合react

    摘要:描述和之間沒有關(guān)系。但是還是比較適合和搭配的,因?yàn)樵试S你以的形式來描述界面,而非常擅長控制的變化。應(yīng)用中應(yīng)有且僅有一個。只需要在渲染根組件時使用即可。創(chuàng)建上一篇開發(fā)教程九基礎(chǔ) 描述 Redux 和 React 之間沒有關(guān)系。Redux 可以搭配 React、Angular 甚至純 JS。但是 Redux 還是比較適合和 React 搭配的,因?yàn)?React 允許你以 state 的形式...

    jsliang 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<