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

【前端知識】React 基礎(chǔ)鞏固(三十三)——Redux的使用詳解

這篇具有很好參考價值的文章主要介紹了【前端知識】React 基礎(chǔ)鞏固(三十三)——Redux的使用詳解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

React 基礎(chǔ)鞏固(三十三)——Redux的使用詳解

Redux的使用詳解

  1. 針對React 基礎(chǔ)鞏固(三十二)中的案例,我們希望抽取頁面中共有的代碼(例如下方的代碼),使用高階組件統(tǒng)一攔截。

    constructor() {
      super();
    
      this.state = {
        counter: store.getState().counter,
      };
    }
    componentDidMount() {
      store.subscribe(() => {
        const state = store.getState();
        this.setState({
          counter: state.counter,
        });
      });
    }
    
  2. 為了讓react和redux產(chǎn)生聯(lián)系,安裝一款工具react-redux

    npm install react-redux
    
  3. 使用react-redux ,在index.js中統(tǒng)一注入store

    import React from "react";
    import ReactDOM from "react-dom/client";
    import App from "./App";
    import { Provider } from "react-redux";
    import store from './store'
    
    const root = ReactDOM.createRoot(document.getElementById("root"));
    root.render(
      <React.StrictMode>
      <Provider store={store}>
      <App />
      </Provider>
    </React.StrictMode>
    );
    
    
  4. 新建about.js頁面,通過react-redux引入store

    import React, { PureComponent } from "react";
    import { connect } from "react-redux";
    
    export class about extends PureComponent {
      render() {
        const { counter } = this.props;
        return (
          <div>
            <div>About: {counter}</div>
          </div>
        );
      }
    }
    
    // connect()的返回值是一個高階函數(shù)
    const mapStateToProps = (state) => ({
      counter: state.counter,
    });
    
    export default connect(mapStateToProps)(about);
    
    
  5. 在App.jsx中引入新的about.jsx頁面,查看運行效果

    import React, { PureComponent } from "react";
    import Home from "./pages/home";
    import Profile from "./pages/profile";
    import About from "./pages/about";
    import "./style.css";
    import store from "./store";
    
    export class App extends PureComponent {
      constructor() {
        super();
    
        this.state = {
          counter: store.getState().counter,
        };
      }
      componentDidMount() {
        store.subscribe(() => {
          const state = store.getState();
          this.setState({
            counter: state.counter,
          });
        });
      }
      render() {
        const { counter } = this.state;
        return (
          <div>
            <h2>App Counter: {counter}</h2>
    
            <div className="pages">
              <Home />
              <Profile />
              <About />
            </div>
          </div>
        );
      }
    }
    
    export default App;
    
    

【前端知識】React 基礎(chǔ)鞏固(三十三)——Redux的使用詳解,前端知識,React,前端,react.js,前端框架
6. 繼續(xù)優(yōu)化代碼,利用react-redux中的connect對state和dispatch進行解耦。在基礎(chǔ)鞏固(三二)中的home.jsx頁面中,state和dispatch如下表示:

import React, { PureComponent } from "react";
import store from "../store";
import { addNumberAction } from "../store/actionCreators";
export class home extends PureComponent {
  constructor() {
    super();

    this.state = {
      counter: store.getState().counter,
    };
  }
  componentDidMount() {
    store.subscribe(() => {
      const state = store.getState();
      this.setState({
        counter: state.counter,
      });
    });
  }

  addNumber(num) {
    store.dispatch(addNumberAction(num));
  }

  render() {
    const { counter } = this.state;
    return (
      <div>
        home counter:{counter}
        <div>
          <button onClick={(e) => this.addNumber(1)}>+1</button>
          <button onClick={(e) => this.addNumber(5)}>+5</button>
          <button onClick={(e) => this.addNumber(8)}>+8</button>
        </div>
      </div>
    );
  }
}

export default home;

為了將頁面與store解耦,在about.jsx中,我們不再使用home.jsx的方式使用state和dispatch,優(yōu)化如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-606467.html

import React, { PureComponent } from "react";
import { connect } from "react-redux";
import { addNumberAction, subNumberAction } from "../store/actionCreators";

export class about extends PureComponent {
  calcNumber(num, isAdd) {
    if (isAdd) {
      this.props.addNumber(num);
    } else {
      this.props.subNumber(num);
    }
  }

  render() {
    const { counter } = this.props;
    return (
      <div>
        <h2>About: {counter}</h2>
        <div>
          <button onClick={(e) => this.calcNumber(6, true)}>+6</button>
          <button onClick={(e) => this.calcNumber(6, false)}>-6</button>
          <button onClick={(e) => this.calcNumber(8, true)}>+8</button>
          <button onClick={(e) => this.calcNumber(8, false)}>-8</button>
        </div>
      </div>
    );
  }
}

// connect()的返回值是一個高階函數(shù)
// 映射state到props
const mapStateToProps = (state) => ({
  counter: state.counter,
});

// 映射dispatch到props
const mapDispatchToProps = (dispatch) => ({
  addNumber(num) {
    dispatch(addNumberAction(num));
  },
  subNumber(num) {
    dispatch(subNumberAction(num));
  },
});

export default connect(mapStateToProps, mapDispatchToProps)(about);

  1. 查看運行結(jié)果
    【前端知識】React 基礎(chǔ)鞏固(三十三)——Redux的使用詳解,前端知識,React,前端,react.js,前端框架

到了這里,關(guān)于【前端知識】React 基礎(chǔ)鞏固(三十三)——Redux的使用詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【前端知識】React 基礎(chǔ)鞏固(十三)——列表渲染

    在 React 中沒有像 Vue 模塊語法中的 v-for 指令,而是需要我們通過 JS 代碼的方式組織數(shù)據(jù),轉(zhuǎn)成 JSX 在 React 中,展示列表最多的方式就是使用數(shù)組的 map 高階函數(shù) 在展示數(shù)組前,有時會進行一些處理 過濾一些內(nèi)容(filter 函數(shù)) 截取數(shù)組中的一部分內(nèi)容(slice 函數(shù)) 列表中的

    2024年02月10日
    瀏覽(31)
  • 【前端知識】React 基礎(chǔ)鞏固(三十五)——ReduxToolKit (RTK)

    【前端知識】React 基礎(chǔ)鞏固(三十五)——ReduxToolKit (RTK)

    Redux Tool Kit (RTK)是官方推薦的編寫Redux邏輯的方法,旨在成為編寫Redux邏輯的標準方式,從而解決上面提到的問題。 RTK的核心API主要有如下幾個: configureStore:包裝createStore以提供簡化的配置選項和良好的默認值。它可以自動組合你的slice reducer,添加你提供的任何Redux中間件

    2024年02月15日
    瀏覽(21)
  • 【前端知識】React 基礎(chǔ)鞏固(三十七)——自定義connect高階組件

    【前端知識】React 基礎(chǔ)鞏固(三十七)——自定義connect高階組件

    從這行代碼可以看到,目前的connect直接引用了上級目錄的store,過于依賴目前既定的store,這樣不利于復用。假設(shè)另一個項目的store所在位置不在上級目錄中,則會出現(xiàn)問題。 為了讓所有人都能使用,我們應該把這種“寫死”的做法換成讓開發(fā)者自己傳入一個store: 構(gòu)建一個

    2024年02月15日
    瀏覽(25)
  • 【前端知識】React 基礎(chǔ)鞏固(三十六)——RTK中的異步操作

    【前端知識】React 基礎(chǔ)鞏固(三十六)——RTK中的異步操作

    引入RTK中的createAsyncThunk,在extraReducers中監(jiān)聽執(zhí)行狀態(tài) 在界面中引入所需的異步操作Action 查看運行結(jié)果 extraReducer還可以傳入一個函數(shù),函數(shù)接受一個builder參數(shù): 查看運行結(jié)果,與之前的寫法結(jié)果一致

    2024年02月15日
    瀏覽(30)
  • 【前端知識】React 基礎(chǔ)鞏固(四十三)——Effect Hook

    【前端知識】React 基礎(chǔ)鞏固(四十三)——Effect Hook

    Effect Hook 用來完成一些類似class中生命周期的功能。 在使用類組件時,不管是渲染、網(wǎng)路請求還是操作DOM,其邏輯和代碼是雜糅在一起的。例如我們希望把計數(shù)器結(jié)果顯示在標簽上,在類組件中,我們通過生命周期進行實現(xiàn),如下所示: 在函數(shù)組件中,我們可以利用useEffec

    2024年02月14日
    瀏覽(39)
  • 【前端知識】React 基礎(chǔ)鞏固(二十三)——React 性能優(yōu)化 SCU相關(guān)

    React 的渲染流程 JSX - 虛擬 DOM - 真實 DOM React 的更新流程 props/state 改變 - render函數(shù)重新執(zhí)行 - 產(chǎn)生新的DOM樹 - 新舊DOM樹進行diff - 計算出差異進行更新 - 更新到真實的DOM React 在 props 或 state 發(fā)生改變時,會調(diào)用 React 的 render 方法,會創(chuàng)建一顆不同的樹 React 需要基于這兩顆不同的

    2024年02月15日
    瀏覽(39)
  • 【前端知識】React 基礎(chǔ)鞏固(三十四)——組件中的異步操作及優(yōu)化

    【前端知識】React 基礎(chǔ)鞏固(三十四)——組件中的異步操作及優(yōu)化

    通過組件的生命周期來完成網(wǎng)絡(luò)請求,網(wǎng)絡(luò)請求的異步代碼直接放在組件中 通過redux來管理異步網(wǎng)絡(luò)請求 在store中引入中間件 redux-thunk 構(gòu)建 fetchHomeMultidataAction ,將原本在組件中的異步請求代碼放入到actionCreators.js中 改寫原來的category.jsx,派發(fā)異步請求的dispatch 查看運行結(jié)果

    2024年02月15日
    瀏覽(38)
  • 【前端知識】React 基礎(chǔ)鞏固(三十八)——log、thunk、applyMiddleware中間件的核心代碼

    利用Monkey Patching,修改原有的程序邏輯,在調(diào)用dispatch的過程中,通過dispatchAndLog實現(xiàn)日志打印功能 redux中利用中間件 redux-thunk 可以讓dispatch不不僅能處理對象,還能處理函數(shù) 單個調(diào)用函數(shù)來應用中間件,非常不方便,封裝一個函數(shù)來合并中間件 在store/index.js中應用上面三個

    2024年02月14日
    瀏覽(46)
  • 【前端知識】React 基礎(chǔ)鞏固(二十六)——Portals 的使用

    【前端知識】React 基礎(chǔ)鞏固(二十六)——Portals 的使用

    通常,組件會渲染到 root 節(jié)點下??墒褂?Portals 將組件渲染至其他節(jié)點。 添加 id 為 more、modal 的 div 元素 構(gòu)建 Modal.jsx, 通過 createPortal 把組件渲染到指定的 modal 節(jié)點下 構(gòu)建 App.jsx 查看渲染結(jié)果

    2024年02月16日
    瀏覽(47)
  • 【前端知識】React 基礎(chǔ)鞏固(二十八)——StrictMode

    【前端知識】React 基礎(chǔ)鞏固(二十八)——StrictMode

    StrictMode 是一個用來突出顯示應用程序中潛在問題的工具 與 Fragment 一樣,StrictMode 不會渲染任何可見的 UI 為后代出發(fā)額外的檢測和警告 嚴格模式檢查僅在開發(fā)模式下運行,不影響生產(chǎn)構(gòu)建 嚴格模式檢查什么? 識別不安全的生命周期 使用過時的 ref API 檢查意外的副作用 組件

    2024年02月16日
    瀏覽(57)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包