亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

一文搞懂redux在react中的初步用法

 更新時(shí)間:2021年06月09日 16:34:25   作者:豐柏林  
Redux是JavaScript狀態(tài)容器,提供可預(yù)測(cè)化的狀態(tài)管理,今天通過(guò)本文給大家分享redux在react中使用及配置redux到react項(xiàng)目中的方法,感興趣的朋友跟隨小編一起看看吧

Redux是一個(gè)數(shù)據(jù)狀態(tài)管理插件,當(dāng)使用React或是vue開(kāi)發(fā)組件化的SPA程序時(shí),組件之間共享信息是一個(gè)非常大的問(wèn)題。例如,用戶登陸之后客戶端會(huì)存儲(chǔ)用戶信息(ID,頭像等),而系統(tǒng)的很多組件都會(huì)用到這些信息,當(dāng)使用這些信息的時(shí)候,每次都重新獲取一遍,這樣會(huì)非常的麻煩,因此每個(gè)系統(tǒng)都需要一個(gè)管理多組件使用的公共信息的功能,這就是redux的作用。

如果你是從來(lái)沒(méi)有接觸過(guò)redux的開(kāi)發(fā)者,希望您能夠有耐心的看一看,我也是看好很多博客慢慢自己總結(jié)的?。。?!比大佬們一個(gè)一個(gè)分布找要強(qiáng)一點(diǎn)。

import React, { Component, Fragment } from 'react';

//Class引入
import { connect } from 'react-redux';

//Hook引入
import { useSelector, useDispatch } from 'react-redux'

import { add, clear } from '../../redux/actions/count';


//hook 展示組件
const CountItem = (props) => {
    // 解構(gòu)出來(lái)
    const {
        count,
        flag,
        add,
        clear
    } = props
    return (
        <>
            <h2>當(dāng)前求和為:{count}</h2>
            <h3>當(dāng)前Flag:{flag ? 'true' : 'false'}</h3>
            <button onClick={add}>點(diǎn)擊+1</button>
            <button onClick={clear}>清零</button>
        </>
    )
}

//hook 容器組件
const Count = () => {
    const count = useSelector(state => state.sum)
    const flag = useSelector(state => state.flag)
    const dispatch = useDispatch()

    const countAdd = () => {
        console.log(add.type)
        dispatch(add(1))
    }

    const clearNum = () => {
        dispatch(clear())
    }

    return <CountItem count={count} flag={flag} add={countAdd} clear={clearNum}  />
}

export default Count



// class 展示組件
// class Count extends Component {
//     add = () => {
//         // 通知redux
//         this.props.add(1);
//     };
//     clear = () => {
//         this.props.clear();
//     };
//     render() {
//         return (
//             <Fragment>
//                 <h2>當(dāng)前求和為:{this.props.count}</h2>
//                 <h3>當(dāng)前Flag:{this.props.flag ? 'true' : 'false'}</h3>
//                 <button onClick={this.add}>點(diǎn)擊+1</button>
//                 <button onClick={this.clear}>清零</button>
//             </Fragment>
//         );
//     }
// }

// class 容器組件
// export default connect(
//     // 1.狀態(tài)
//     state => ({ count: state.sum, flag: state.flagState }),
//     // 2.方法
//     { add, clear }
// )(Count);

基本的使用差不多就是這個(gè)樣子,我們?cè)趆ook上面用到的關(guān)鍵方法就是useSelector來(lái)使用redux的state、用dispatch來(lái)調(diào)用reduce;在class組件中用connect進(jìn)行state和方法(reduce)的關(guān)聯(lián)。

這里面難點(diǎn)就在于reduce和state

這里的reduce是什么

上面的代碼里面我們用到了add和clear這兩個(gè)方法,我們新建一個(gè)js文件來(lái)實(shí)現(xiàn)這兩個(gè)方法。

// 為Count組件創(chuàng)建action對(duì)象
// 引入常量
import { ADD, CLEAR } from '../constant';

// 創(chuàng)建加一action對(duì)象的函數(shù)
export const add = data => ({
    type: ADD,
    data,
});

// 創(chuàng)建清零action對(duì)象的函數(shù)
export const clear = data => ({
    type: CLEAR,
    data,
});

上面有常量----這是為了方便actionType的統(tǒng)一管理,創(chuàng)建對(duì)應(yīng)的action對(duì)象有助于代碼模塊化。
貼上,自己建一個(gè)constant.js放進(jìn)去

export const ADD = 'add';
export const CLEAR = 'clear';

到這里我們的action對(duì)象定義的差不多了,我們要進(jìn)行reducer的管理了。也就是dispatch分發(fā)上面的action對(duì)象來(lái)實(shí)現(xiàn)state的更新

在reducer文件夾里面我們定義一個(gè)count.js

// 為Count組件創(chuàng)建一個(gè)reducer
// reducer接收兩個(gè)參數(shù):之前狀態(tài)的preState,動(dòng)作對(duì)象action

import { ADD, CLEAR } from '../constant.js';

// 設(shè)定初始狀態(tài)
const initState = 0;

export default function addReducer(preState = initState, action) {
    // 從action中獲取type和data
    const { type, data } = action;
    // 根據(jù)type決定如何加工數(shù)據(jù)
    switch (type) {
        case ADD:
            return preState + data;
        case CLEAR:
            return 0;
        // 初始化動(dòng)作
        default:
            return preState;
    }
}

上面的方法要通過(guò)dispatch來(lái)進(jìn)行type的分發(fā)調(diào)用(強(qiáng)調(diào)加一)

到這里使用就完成了 接下來(lái)看配置redux到react項(xiàng)目中

這里就不要倒敘了,因?yàn)檫@里倒敘不合理。
這里關(guān)鍵的幾個(gè)配置
store.js的配置和全局的store的使用

先看全局使用store
在你的根路由下面用Provider包裹App。

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.jsx';
import store from './redux/store';
import { Provider } from 'react-redux';

ReactDOM.render(
    // Provider包裹App,目的:讓App所有的后代容器組件都能接收到store
    <Provider store={store}>
        <App />
    </Provider>,
    document.getElementById('root')
);

這里面有個(gè)redux/store.js 看代碼

// 整個(gè)文檔只有一個(gè)store對(duì)象,createStore接收兩個(gè)參數(shù),第一個(gè)是state樹(shù),第二個(gè)是要處理的action
//applyMiddleware 匯總所有的中間件變成一個(gè)數(shù)組依次執(zhí)行,異步處理
import { createStore, applyMiddleware } from 'redux';
//中間件
import thunk from 'redux-thunk';
//匯總所有的reducer
import allReducers from './reducers/index';
//這里是goole的調(diào)試調(diào)試工具,具體使用:百度
import { composeWithDevTools } from 'redux-devtools-extension';

// 暴露store
export default createStore(allReducers, composeWithDevTools(applyMiddleware(thunk)));

到這里這篇文章就要結(jié)束了,里面的一些執(zhí)行流程和原理我還不是理解,接下來(lái)仍要多多鞏固,多多學(xué)習(xí)。

以上就是一文解決redux在react中的初步使用的詳細(xì)內(nèi)容,更多關(guān)于redux在react中使用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

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

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

    這篇文章主要介紹了react build 后打包發(fā)布總結(jié),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • 詳解如何構(gòu)建自己的react hooks

    詳解如何構(gòu)建自己的react hooks

    我們組的前端妹子在組內(nèi)分享時(shí)談到了 react 的鉤子,趁此機(jī)會(huì)我也對(duì)我所理解的內(nèi)容進(jìn)行下總結(jié),方便更多的同學(xué)了解。在 React 的 v16.8.0 版本里添加了 hooks 的這種新的 API,我們非常有必要了解下他的使用方法,并能夠結(jié)合我們的業(yè)務(wù)編寫(xiě)幾個(gè)自定義的 hooks。
    2021-05-05
  • 詳解React 條件渲染

    詳解React 條件渲染

    這篇文章主要介紹了React 條件渲染的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • sass在react中的基本使用(實(shí)例詳解)

    sass在react中的基本使用(實(shí)例詳解)

    這篇文章主要介紹了sass在react中的基本使用,主要包括安裝sass和編寫(xiě)APP.tsx中的基本dom,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • 詳解操作虛擬dom模擬react視圖渲染

    詳解操作虛擬dom模擬react視圖渲染

    這篇文章主要介紹了詳解操作虛擬dom模擬react視圖渲染,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • 淺談react-router@4.0 使用方法和源碼分析

    淺談react-router@4.0 使用方法和源碼分析

    這篇文章主要介紹了淺談react-router@4.0 使用方法和源碼分析,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • react-routerV6版本和V5版本的詳細(xì)對(duì)比

    react-routerV6版本和V5版本的詳細(xì)對(duì)比

    React-Router5是React-Router6的前一個(gè)版本,它已經(jīng)被React-Router6取代,React-Router 6是一次較大的重大更新,本文就來(lái)介紹一下react-routerV6版本和V5版本的詳細(xì)對(duì)比,感興趣的可以了解一下
    2023-12-12
  • React組件渲染后對(duì)DOM的操作方式

    React組件渲染后對(duì)DOM的操作方式

    這篇文章主要介紹了React組件渲染后對(duì)DOM的操作方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • React路由中的redux和redux知識(shí)點(diǎn)拓展

    React路由中的redux和redux知識(shí)點(diǎn)拓展

    這篇文章主要介紹了React路由中的redux和redux知識(shí)點(diǎn)拓展,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的朋友可以參考學(xué)習(xí)一下
    2022-08-08
  • React Router v4 入坑指南(小結(jié))

    React Router v4 入坑指南(小結(jié))

    這篇文章主要介紹了React Router v4 入坑指南(小結(jié)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04

最新評(píng)論