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

Redux - Redux在React函數(shù)式組件中的基本使用

這篇具有很好參考價值的文章主要介紹了Redux - Redux在React函數(shù)式組件中的基本使用。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

Redux - Redux在React函數(shù)式組件中的基本使用,react.js,前端,前端框架

一,簡介

Redux 是 JavaScript 應(yīng)用的狀態(tài)容器,提供可預(yù)測的狀態(tài)管理。

它主要的幾個方法如下:

Redux - Redux在React函數(shù)式組件中的基本使用,react.js,前端,前端框架
重要的有方法 有 dispatch(分發(fā)action)、getState(獲取state)、subscribe(監(jiān)聽state的變化),下面會介紹到,另外兩個可以不用管;


那什么時候使用Redux呢?

當(dāng)遇到如下問題時,建議開始使用 Redux

  1. 你有很多數(shù)據(jù)隨時間而變化
  2. 你希望狀態(tài)有一個唯一確定的來源(single source of truth)
  3. 你發(fā)現(xiàn)將所有狀態(tài)放在頂層組件中管理已不可維護(hù)

二,安裝

我這里安裝的是 "redux": "^4.2.1"版本;

npm install redux --save

項(xiàng)目的src目錄下面新建store文件夾index.js,reducer.js;如下:

Redux - Redux在React函數(shù)式組件中的基本使用,react.js,前端,前端框架

三,三大核心概念Store、Action、Reducer

3.1 Store

Store:存儲數(shù)據(jù)的地方。最好整個應(yīng)用只有一個 Store。

createStore() :用來生成 Store。接收 Reducer 作為其參數(shù)。

index.js

/**
 * 引入createStore 專門創(chuàng)建最為核心的store對象
 * 目前createStore已經(jīng)棄用,所以我們要引用legacy_createStore 
 */

iimport { legacy_createStore } from "redux";
import reducer from './reducer.ts'

// 創(chuàng)建數(shù)據(jù)倉庫 引入reducer函數(shù)進(jìn)行對數(shù)據(jù)的處理
const store = legacy_createStore(reducer)

export default store

3.2 Reducer

reduce的本質(zhì)就是一個函數(shù) ,作用是初始化狀態(tài)和加工狀態(tài)。

reduce函數(shù)里面接收兩個參數(shù),第一個參數(shù)是state的初始值,第二個參數(shù)是一個action對象,對象里的第一個屬性是type也就是函數(shù)的名稱,第二個屬性就是傳進(jìn)來的值,用于后續(xù)更改state;

reducer.ts


// 約束類型
interface Eula {
  name: string;
  age: number;
}
// 定義數(shù)據(jù)
const defaultState: Eula = {
  name: "Eula",
  age: 18
};

// reducer 函數(shù) 用于更改數(shù)據(jù)
let reducer = (preState = defaultState, action: { type: string; data: number }) => {
  // action解構(gòu)出來
  let { type, data } = action;

  // 第一種寫法 每個分支使用return進(jìn)行返回
  // switch (type) {
  //   case "update_age":
  //     preState.age = data;
  //     return preState;
  //   case "add_age":
  //     preState.age++;
  //     return preState;
  //   case "del_age":
  //     preState.age--;
  //     return preState;
  //   default:
  //     return preState; // 初始化時
  // }

  // 第二種寫法 break 與最終的return返回結(jié)果
  switch (type) {
    case "update_age":
      preState.age = data;
      break;
    case "add_age":
      preState.age++;
      break;
    case "del_age":
      preState.age--;
      break;
    default:
      preState; // 初始化時
  }
  return preState;  // 此處 一定要使用return進(jìn)行返回最終改變的值
};

export default reducer;

注意: 初次加載 Store 會自動調(diào)用一次 Reducer 進(jìn)行初始化狀態(tài),此時 state 是 undefined,action 對象中的 type 為 @@redux/INITxxx。手動調(diào)用 store.dispatch() 也會觸發(fā) Reducer 的自動執(zhí)行。

3.3 Action

Action 就是一個普通的 JS 對象,用于描述要更新的數(shù)據(jù)類型和內(nèi)容,其中 type 屬性是必須的,表示 Action 的名稱,其他屬性可以自由設(shè)置。

redux.tsx

// 引入store
import store from "../../../store/index";
// 更改數(shù)據(jù)時調(diào)用
store.dispatch({ type: "update_age", data: 100 });

store.dispatch():所有數(shù)據(jù)的變化,必須通過派發(fā)(dispatch) Action 來更新。接受一個 Action 對象作為參數(shù),將其發(fā)送出去。

四,開始函數(shù)式組件中使用

redux.tsx

import React, { useState } from "react";
//  1,引入store
import store from "../../../store/index";

// 渲染數(shù)據(jù)
const myList:[] = [];

const Redux: React.FC = () => {
  let [list, setList] = useState(myList);
  console.log("store:", store);

  // 監(jiān)聽數(shù)據(jù)的變化
  const unsubscribe = store.subscribe(() => {
    console.log("訂閱數(shù)據(jù)的變化", store.getState());
    // 此處用來觸發(fā)視圖的更新
    setList([]);
  });

  // 改變store中的數(shù)據(jù)
  const update = () => {
    store.dispatch({ type: "update_age", data: 100 });
  };
  const add = () => {
    store.dispatch({ type: "add_age" });
  };
  const del = () => {
    store.dispatch({ type: "del_age" });
  };

  // 此處才是真正渲染的頁面
  return (
    <div className="redux">
      <h3>redux演示</h3>
      <button onClick={update}>更改store的數(shù)據(jù)+100</button>
      <button onClick={add}>更改store的數(shù)據(jù)++</button>
      <button onClick={del}>更改store的數(shù)據(jù)--</button>
      <p>store的num數(shù)據(jù):{store.getState().age}</p>
    </div>
  );
};
export default Redux;

效果圖:

Redux - Redux在React函數(shù)式組件中的基本使用,react.js,前端,前端框架

上面的組件是一個簡單的案例演示,定義了三個點(diǎn)擊事件,點(diǎn)擊第一個按鈕state.age+100,點(diǎn)擊第二個按鈕每次state.age+1,點(diǎn)擊第三個按鈕age每次減一;下面會詳細(xì)介紹幾個重點(diǎn)內(nèi)容:

4.1,引入store

先引進(jìn)來,這個沒什么好說的;

import store from "../../../store/index";

4.1,store.getState()方法

getState()方法是redux實(shí)例下的方法之一,上面的第一張截圖已經(jīng)通過store實(shí)例打印出來了;

getState()的作用是獲取當(dāng)前狀態(tài)下運(yùn)行在redux中的state;也就是說獲取store中最新的數(shù)據(jù);

   <p>store的num數(shù)據(jù):{store.getState().age}</p>

4.3,store.dispatch()方法

dispatch() 是唯一能夠修改 state 數(shù)據(jù)的行為。通過分發(fā)action (其實(shí)就是一個對象),配合 dispatch 函數(shù)傳入的 action 及其 payload 計(jì)算得到新的 state,并更新到閉包數(shù)據(jù)中,這樣就實(shí)現(xiàn)了 state 的更新;

如下:
reducer.tsx

  // 改變store中的數(shù)據(jù)
  const update = () => {
    store.dispatch({ type: "update_age", data: 100 });
  };
  const add = () => {
    store.dispatch({ type: "add_age" });
  };
  const del = () => {
    store.dispatch({ type: "del_age" });
  };

上面的代碼會和下面的 switch case 表達(dá)式所判斷的type要一 一對應(yīng),用于更新state;

reducer.ts

let reducer = (preState = defaultState, action: { type: string; data: number }) => {
  let { type, data } = action;
  
  // 第一種寫法 每個分支使用return進(jìn)行返回
  // switch (type) {
  //   case "update_age":
  //     preState.age = data;
  //     return preState;
  //   case "add_age":
  //     preState.age++;
  //     return preState;
  //   case "del_age":
  //     preState.age--;
  //     return preState;
  //   default:
  //     return preState; // 初始化時
  // }

  // 第二種寫法 break 與最終的return返回結(jié)果
  switch (type) {
    case "update_age":
      preState.age = data;
      break;
    case "add_age":
      preState.age++;
      break;
    case "del_age":
      preState.age--;
      break;
    default:
      preState; // 初始化時
  }
  return preState;  // 此處 一定要使用return進(jìn)行返回最終改變的值
};

上面的兩種寫法是一樣的;對比一下;

4.4,store.subscribe()方法

subscribe函數(shù)只要store中的state數(shù)據(jù)變化了,就會觸發(fā)subscribe方法,相當(dāng)注冊了一個監(jiān)聽器;監(jiān)聽store中的數(shù)據(jù)變化;

從 react 層面來說,redux 的 store 是隔離開的,我們需要一個橋梁,使得數(shù)據(jù)層出現(xiàn)更新的同時更新UI層邏輯,這時 store 中的最后一個方法,subscribe 方法就派上用場了。

注意: setList([]):是為了主動觸發(fā)react視圖更新的方法,否則store中數(shù)據(jù)改變了,視圖卻沒有重新渲染。

import React, { useState } from "react";
const Redux: React.FC = () => { 
  let [list, setList] = useState(myList);
// 監(jiān)聽數(shù)據(jù)的變化
  const unsubscribe = store.subscribe(() => {
    console.log("訂閱數(shù)據(jù)的變化", store.getState());
    // 此處用來觸發(fā)視圖的更新
    setList([]);
  });
}

subscribe也同時返回了一個 unsubscribe 函數(shù)。當(dāng)我們不在希望訂閱這個監(jiān)聽器時,調(diào)用 unsubscribe(),對應(yīng)的函數(shù)就會從監(jiān)聽器隊(duì)列中被移除。

unsubscrib() // 不再監(jiān)聽

五,Redux 的三大原則

  1. 單一數(shù)據(jù)源:整個應(yīng)用程序的 State 被存儲在一棵 object tree 中,并且這棵 object tree 只存儲在一個 Store 中。單一數(shù)據(jù)源可以讓整個應(yīng)用程序的 State 變得方便維護(hù)、修改、追蹤。
  2. State 是只讀的:唯一修改 State 的方法就是觸發(fā) Action,不要試圖在其他地方通過任何的方式來修改State。這樣可以保證所有的修改都被集中化處理,并且按照嚴(yán)格的順序來執(zhí)行。
  3. 使用純函數(shù)來執(zhí)行修改:通過 Reducer 將舊的 State 和 Action 聯(lián)系在一起,返回一個新的 State。所有的Reducer 都應(yīng)該是純函數(shù),不能產(chǎn)生任何的副作用。

End:


[redux中文網(wǎng)]: https://cn.redux.js.org/文章來源地址http://www.zghlxwxcb.cn/news/detail-639528.html

到了這里,關(guān)于Redux - Redux在React函數(shù)式組件中的基本使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【前端知識】React 基礎(chǔ)鞏固(三十二)——Redux的三大原則、使用流程及實(shí)踐

    【前端知識】React 基礎(chǔ)鞏固(三十二)——Redux的三大原則、使用流程及實(shí)踐

    單一數(shù)據(jù)源 整個應(yīng)用程序的state被存儲在一顆object tree 中,并且這個object tree 只存儲在一個store中; Redux并沒有強(qiáng)制讓我們不能創(chuàng)建多個Store,但是那樣做不利于數(shù)據(jù)維護(hù); 單一的數(shù)據(jù)源可以讓整個應(yīng)用程序的state變得方便維護(hù)、追蹤、修改; State是只讀的 唯一修改State的方法

    2024年02月15日
    瀏覽(30)
  • react之react-redux的介紹、基本使用、獲取狀態(tài)、分發(fā)動作、數(shù)據(jù)流、reducer的分離與合并等

    react之react-redux的介紹、基本使用、獲取狀態(tài)、分發(fā)動作、數(shù)據(jù)流、reducer的分離與合并等

    官網(wǎng)地址 React 和 Redux 是兩個獨(dú)立的庫,兩者之間職責(zé)獨(dú)立。因此,為了實(shí)現(xiàn)在 React 中使用 Redux 進(jìn)行狀態(tài)管理 ,就需要一種機(jī)制,將這兩個獨(dú)立的庫關(guān)聯(lián)在一起。這時候就用到 React-Redux 這個綁定庫了 作用:為 React 接入 Redux,實(shí)現(xiàn)在 React 中使用 Redux 進(jìn)行狀態(tài)管理。 react-r

    2024年02月11日
    瀏覽(31)
  • React中的組件的渲染函數(shù)(Render Function)是什么?什么是React中的函數(shù)組件和類組件?如何在React中進(jìn)行狀態(tài)管理?

    React中的組件可以有多種形式的渲染函數(shù),包括傳統(tǒng)的render()方法,以及近年來興起的函數(shù)組件和Hooks中的useState()和useEffect()。在這篇文章中,我將詳細(xì)介紹渲染函數(shù),以及如何在React中使用它們。 渲染函數(shù)(Render Function)是指組件在生命周期中的一個特殊方法,它的作用是根據(jù)

    2024年02月13日
    瀏覽(26)
  • 前端react入門day02-React中的事件綁定與組件

    前端react入門day02-React中的事件綁定與組件

    (創(chuàng)作不易,感謝有你,你的支持,就是我前行的最大動力,如果看完對你有幫助,請留下您的足跡) 目錄 React中的事件綁定 React 基礎(chǔ)事件綁定 使用事件對象參數(shù)? 傳遞自定義參數(shù)? 同時傳遞事件對象和自定義參數(shù)? React中的組件? 組件是什么 React組件 useState? 修改狀態(tài)的規(guī)

    2024年02月06日
    瀏覽(24)
  • React中的類組件和函數(shù)組件(詳解)

    ?????? React 的核心思想就是組件化,相對于 Vue 來說, React 的組件化更加靈活和多樣。主要可以分為兩大類: 函數(shù)組件 , 類組件, 這兩大類組件的名稱 必須是大寫字母開頭 ?????函數(shù)組件通常是 function 進(jìn)行定義的函數(shù),這個函數(shù)會返回和類組件中 render 函數(shù)返回一樣

    2024年02月09日
    瀏覽(28)
  • 【前端】React快速入門+Redux狀態(tài)管理

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

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

    2024年02月12日
    瀏覽(60)
  • 【前端知識】React 基礎(chǔ)鞏固(三十一)——Redux的簡介

    概念 純函數(shù)(確定的輸入一定產(chǎn)生確定的輸出,函數(shù)在執(zhí)行過程中不產(chǎn)生副作用): 在程序設(shè)計(jì)中,若一個函數(shù)符合以下條件,那么這個函數(shù)就被稱為純函數(shù) 此函數(shù)在相同的輸入值時,需產(chǎn)生相同的輸出 函數(shù)的輸出和輸入值以外的其他隱藏信息或狀態(tài)無關(guān),也和由I/O設(shè)備產(chǎn)

    2024年02月16日
    瀏覽(24)
  • React和Redux中的不變性

    https://overreacted.io/zh-hans/a-complete-guide-to-useeffect/ 一、不變性和副作用 1.不變:不斷創(chuàng)造新值來替換舊值 2.不變性規(guī)則: (1)當(dāng)給定相同的輸入時,純函數(shù)必須始終返回相同的值 (2)純函數(shù)不能有任何副作用 3.副作用:修改直接函數(shù)范圍之外的東西 改變/修改傳入的參數(shù)(的

    2024年02月10日
    瀏覽(16)
  • React中使用Redux (二) - 通過react-redux庫連接React和Redux

    react-redux庫使用Redux 上一篇文章演示React中直接使用Redux的使用過程是十分繁瑣的, 并且有許多重復(fù)代碼 但是實(shí)際上redux官方幫助我們提供了 react-redux 的庫,這個庫是幫助我們完成連接redux和react的輔助工具, 可以直接在項(xiàng)目中使用,并且實(shí)現(xiàn)的邏輯會更加的嚴(yán)謹(jǐn)和高效 這篇我們

    2024年02月20日
    瀏覽(29)
  • React中的redux-saga詳解

    React中的redux-saga詳解

    redux-saga 是 redux 一個中間件,它是基于ES6 的 Generator 功能實(shí)現(xiàn),用于解決異步問題(讓redux中可以直接進(jìn)行異步操作)。 組件會發(fā)送一個 action 對象給 redux-saga,redux-saga(主saga) 就會分析監(jiān)聽 saga 中有沒有當(dāng)前 action 對應(yīng)的 type 類型操作,如果在監(jiān)聽 saga 中找到了,說明當(dāng)前

    2024年02月04日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包