国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

react 09之狀態(tài)管理工具1 redux+ react-thunk的使用實(shí)現(xiàn)跨組件狀態(tài)管理與異步操作

這篇具有很好參考價(jià)值的文章主要介紹了react 09之狀態(tài)管理工具1 redux+ react-thunk的使用實(shí)現(xiàn)跨組件狀態(tài)管理與異步操作。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

react 09之狀態(tài)管理工具1 redux+ react-thunk的使用實(shí)現(xiàn)跨組件狀態(tài)管理與異步操作

  • npm install redux react-redux

  • npm i redux-thunk

  • redux-thunk

    • redux-thunk是一個(gè)Redux的中間件,它允許你在Redux中編寫異步的action creators。

store / index.js store的入口文件

import { applyMiddleware, legacy_createStore } from 'redux';
// 引入redux-thunk,用于支持異步action
import reduxThunk from 'redux-thunk';
// 引入?yún)R總后的reducer
import reducers from './reducers';

const store = legacy_createStore(reducers, applyMiddleware(reduxThunk))
export default store;

index.js 在項(xiàng)目入口文件 引入

import App from "./7redux/2使用thunk/App類";
import store from "./store/index.js";
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
    <Provider store={store}>
        <App />
    </Provider>
);

store / actionType.js 定義action的唯一標(biāo)識(shí)

// 常量 唯一標(biāo)識(shí) 標(biāo)記當(dāng)前action的唯一性
export const FORM_ADD_COUNT = 'form_addCount'
export const FORM_SUB_COUNT = 'form_subCount'
export const LIST_ADD_LIST = 'list_addList'

store / reducers / index.js

/*
	該文件用于匯總所有的reducer為一個(gè)總的reducer
*/
//引入combineReducers,用于匯總多個(gè)reducer
import { combineReducers } from "redux";
//引入為form組件服務(wù)的reducer
import form from "./form";
//引入為list組件服務(wù)的reducer
import list from "./list";

//匯總所有的reducer變?yōu)橐粋€(gè)總的reducer
export default combineReducers({
  form,
  list,
});

store / actions / form.js

/*
	該文件專門為Form組件生成相關(guān)action對(duì)象
*/
import { FORM_ADD_COUNT, FORM_SUB_COUNT } from "../actionType";

export const form_addCount = (data) => ({ type: FORM_ADD_COUNT, data });
export const form_subCount = (data) => ({ type: FORM_SUB_COUNT, data });

export const formAddAsync = (data) => {
  return (dispatch) => {
    setTimeout(() => {
      dispatch(form_addCount(data));
    }, 2000);
  };
};

store / reducers / form.js

import { FORM_ADD_COUNT, FORM_SUB_COUNT } from "../actionType";
/**
 * form組件的reducer
 */
// 初始狀態(tài)
let initSate = {
  count: 0
};
export default function formReducer(state = initSate, action) {
  switch (action.type) {
    case FORM_ADD_COUNT:
      return {
        ...state,
        count: state.count + 1
      }
    case FORM_SUB_COUNT:
      return {
        ...state,
        count: state.count - 1
      }
    default:
      return state;
  }
}

store / actions / list.js

/*
	該文件專門為List組件生成相關(guān)action對(duì)象
*/
import { LIST_ADD_LIST } from "../actionType";

// 同步action
export const list_addList = (data) => ({ type: LIST_ADD_LIST, data });

store / reducers / list.js

import { LIST_ADD_LIST } from '../actionType'

// 初始狀態(tài)
const initSate = {
    list:[]
}

export default function listReducer(state=initSate,action){
    switch(action.type){
        case LIST_ADD_LIST:
            return {...state,list:[...state.list,action.data]}
        default:
            return state
    }
}

使用 App類.jsx

import React, { Component } from 'react';
import { connect } from "react-redux";
import { formAddAsync, form_addCount, form_subCount } from "../../store/actions/form";
import { list_addList } from "../../store/actions/list";
import ASon from "./ASon";
class App extends Component {
 state = {
 }
 componentDidMount() {}
 render(){
  // console.log('111',this.props);
  const { count,list } = this.props
  const addList = ()=>{
    let str = list && list.length ? '我是' + (list.length + 1) : '我是1'
    let arr = []
    arr.push(str)
    this.props.list_addList(arr)
  }
   return (
     <div>
      app
      <p>Count: {count}</p>
         <button onClick={this.props.form_addCount}>Increment</button>
         <button onClick={this.props.form_subCount}>Decrement</button>
         <button onClick={this.props.formAddAsync}>異步add</button>
         <div>----</div>
         <ASon></ASon>
         <div>----</div>
         <div>
          {
            list ? list.map((item,idx)=>{
              return (
                <div key={idx}>
                  {item}
                </div>
              )
            }) : ''
          }
         <button onClick={addList}>addList</button>
         </div>
     </div>
   )
 }
}

// 拿到redux的值
const mapStateToProps = (state) => {
  return {
    count: state.form.count,
    list: state.list.list,
  };
};
// 拿到redux 所觸發(fā)的
const mapDispatchToProps = {
  form_addCount,
  form_subCount,
  formAddAsync,
  list_addList
}
export default connect(mapStateToProps, mapDispatchToProps)(App);

ASon.jsx

import React from 'react';
import { connect } from "react-redux";
import { form_addCount } from "../../store/actions/form";
const ASon = (props) => {
    return (
        <div className='content'>
          ASon 組件 count-{props.count} <br/>
          <button onClick={props.form_addCount}>Increment</button>
        </div>
    )
}

// 拿到redux的值
const mapStateToProps = (state) => {
  return {
    count: state.form.count
  };
};
// 拿到redux 所觸發(fā)的
const mapDispatchToProps = {
  form_addCount,
}
export default connect(mapStateToProps, mapDispatchToProps)(ASon);

效果

react 09之狀態(tài)管理工具1 redux+ react-thunk的使用實(shí)現(xiàn)跨組件狀態(tài)管理與異步操作,React,react.js,前端,前端框架

react 09之狀態(tài)管理工具1 redux+ react-thunk的使用實(shí)現(xiàn)跨組件狀態(tài)管理與異步操作,React,react.js,前端,前端框架文章來源地址http://www.zghlxwxcb.cn/news/detail-648198.html

到了這里,關(guān)于react 09之狀態(tài)管理工具1 redux+ react-thunk的使用實(shí)現(xiàn)跨組件狀態(tài)管理與異步操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【前端】React快速入門+Redux狀態(tài)管理

    【前端】React快速入門+Redux狀態(tài)管理

    本文旨在記錄react的基礎(chǔ)內(nèi)容,幫助有需要的同學(xué)快速上手,需要進(jìn)一步了解描述更加穩(wěn)妥和全面的信息,請(qǐng)查閱官方文檔 官方文檔點(diǎn)擊這里進(jìn)行跳轉(zhuǎn) react框架 vue,react,angular這幾種主流前端框架使用頻率較高…本質(zhì)還是js庫。 React.js是一個(gè)用于構(gòu)建用戶界面的JavaScript庫。它由

    2024年02月12日
    瀏覽(60)
  • vue2(Vuex)、vue3(Pinia)、react(Redux)狀態(tài)管理

    vue2(Vuex)、vue3(Pinia)、react(Redux)狀態(tài)管理

    Vuex 是一個(gè)專為 Vue.js應(yīng)用程序開發(fā)的狀態(tài)管理模式。它使用集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài),以及規(guī)則保證狀態(tài)只能按照規(guī)定的方式進(jìn)行修改。 State(狀態(tài)) :Vuex 使用單一狀態(tài)樹,即一個(gè)對(duì)象包含全部的應(yīng)用層級(jí)狀態(tài)。這個(gè)狀態(tài)樹對(duì)應(yīng)著一個(gè)應(yīng)用中的所有狀態(tài)。 Gett

    2024年01月23日
    瀏覽(27)
  • 【實(shí)戰(zhàn)】 九、深入React 狀態(tài)管理與Redux機(jī)制(一) —— React17+React Hook+TS4 最佳實(shí)踐,仿 Jira 企業(yè)級(jí)項(xiàng)目(十六)

    學(xué)習(xí)內(nèi)容來源:React + React Hook + TS 最佳實(shí)踐-慕課網(wǎng) 相對(duì)原教程,我在學(xué)習(xí)開始時(shí)(2023.03)采用的是當(dāng)前最新版本: 項(xiàng) 版本 react react-dom ^18.2.0 react-router react-router-dom ^6.11.2 antd ^4.24.8 @commitlint/cli @commitlint/config-conventional ^17.4.4 eslint-config-prettier ^8.6.0 husky ^8.0.3 lint-staged ^13.1.2 p

    2024年02月15日
    瀏覽(21)
  • 【實(shí)戰(zhàn)】 九、深入React 狀態(tài)管理與Redux機(jī)制(二) —— React17+React Hook+TS4 最佳實(shí)踐,仿 Jira 企業(yè)級(jí)項(xiàng)目(十七)

    學(xué)習(xí)內(nèi)容來源:React + React Hook + TS 最佳實(shí)踐-慕課網(wǎng) 相對(duì)原教程,我在學(xué)習(xí)開始時(shí)(2023.03)采用的是當(dāng)前最新版本: 項(xiàng) 版本 react react-dom ^18.2.0 react-router react-router-dom ^6.11.2 antd ^4.24.8 @commitlint/cli @commitlint/config-conventional ^17.4.4 eslint-config-prettier ^8.6.0 husky ^8.0.3 lint-staged ^13.1.2 p

    2024年02月14日
    瀏覽(23)
  • 【實(shí)戰(zhàn)】 九、深入React 狀態(tài)管理與Redux機(jī)制(五) —— React17+React Hook+TS4 最佳實(shí)踐,仿 Jira 企業(yè)級(jí)項(xiàng)目(二十)

    學(xué)習(xí)內(nèi)容來源:React + React Hook + TS 最佳實(shí)踐-慕課網(wǎng) 相對(duì)原教程,我在學(xué)習(xí)開始時(shí)(2023.03)采用的是當(dāng)前最新版本: 項(xiàng) 版本 react react-dom ^18.2.0 react-router react-router-dom ^6.11.2 antd ^4.24.8 @commitlint/cli @commitlint/config-conventional ^17.4.4 eslint-config-prettier ^8.6.0 husky ^8.0.3 lint-staged ^13.1.2 p

    2024年02月13日
    瀏覽(27)
  • 【MySQL | 進(jìn)階篇】09、MySQL 管理及常用工具(mysqladmin、mysqlbinlog、mysqldump 等)的使用

    【MySQL | 進(jìn)階篇】09、MySQL 管理及常用工具(mysqladmin、mysqlbinlog、mysqldump 等)的使用

    目錄 一、系統(tǒng)數(shù)據(jù)庫 二、常用工具? 2.1 mysql 示例 2.2 mysqladmin? 示例? 2.3 mysqlbinlog 示例 2.4 mysqlshow 示例 2.5 mysqldump(數(shù)據(jù)備份) 示例 2.6 mysqlimport/source(數(shù)據(jù)恢復(fù)) 2.6.1?mysqlimport 2.6.2?source Mysql 數(shù)據(jù)庫安裝完成后,自帶了以下四個(gè)數(shù)據(jù)庫,具體作用如下: 該 mysql 不是指 my

    2023年04月21日
    瀏覽(23)
  • Vue最新狀態(tài)管理工具Pinia——徹底搞懂Pinia是什么

    Vue最新狀態(tài)管理工具Pinia——徹底搞懂Pinia是什么

    知識(shí)專欄 專欄鏈接 Vuex知識(shí)專欄 https://blog.csdn.net/xsl_hr/category_12158336.html?spm=1001.2014.3001.5482 Vuex官方文檔 https://vuex.vuejs.org/zh/ Pinia官方文檔 https://pinia.web3doc.top/ 最近在 前端的深入學(xué)習(xí)過程 中,接觸了與 狀態(tài)管理 相關(guān)的內(nèi)容,涉及到 與vue2適配的vuex 和 與vue3適配的pinia ,因此

    2024年02月03日
    瀏覽(53)
  • Vue中的Pinia狀態(tài)管理工具 | 一篇文章教會(huì)你全部使用細(xì)節(jié)

    Vue中的Pinia狀態(tài)管理工具 | 一篇文章教會(huì)你全部使用細(xì)節(jié)

    Pinia(發(fā)音為/pi?nj?/,如英語中的“peenya”)是最接近pi?a(西班牙語中的菠蘿)的詞 ; Pinia開始于大概2019年,最初是 作為一個(gè)實(shí)驗(yàn)為Vue重新設(shè)計(jì)狀態(tài)管理 ,讓它用起來適合組合式API(Composition API)。 從那時(shí)到現(xiàn)在,最初的設(shè)計(jì)原則依然是相同的,并且目前同時(shí)兼容Vue2、

    2024年02月11日
    瀏覽(23)
  • 第n+2次安裝前端環(huán)境-nvm管理包工具-配置react環(huán)境

    我之前電腦實(shí)在是沒辦法用nvm搭建前端環(huán)境!惱火,只能推倒重來了。 首先就先去將自己的電腦里面的原來的nvm軟件刪除了。除此之外還要看看有沒有之前單獨(dú)安裝過nodejs的,如果之前單獨(dú)安裝過那也要?jiǎng)h除掉。 今天我就是看到自己的電腦友nvm,以為能用,于是通過nvm切換不

    2024年02月09日
    瀏覽(20)
  • Vue2向Vue3過度Vue3狀態(tài)管理工具Pinia

    Vue2向Vue3過度Vue3狀態(tài)管理工具Pinia

    Pinia 是 Vue 的專屬的最新狀態(tài)管理庫 ,是 Vuex 狀態(tài)管理工具的替代品 后面在實(shí)際開發(fā)項(xiàng)目的時(shí)候,Pinia可以在項(xiàng)目創(chuàng)建時(shí)自動(dòng)添加,現(xiàn)在我們初次學(xué)習(xí),從零開始: 使用 Vite 創(chuàng)建一個(gè)空的 Vue3項(xiàng)目 按照官方文檔安裝 pinia 到項(xiàng)目中 定義store 組件使用store Pinia中的 getters 直接使

    2024年02月11日
    瀏覽(55)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包