欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

React Hooks - useContetx和useReducer的使用實例詳解

 更新時間:2022年11月23日 10:03:48   作者:藍桉cyq  
這篇文章主要介紹了React Hooks - useContetx和useReducer的基本使用,本文通過實例代碼給大家講解的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

useContetx的使用

在之前的開發(fā)中,我們要在組件中使用共享的Context有兩種方式:

類組件可以通過 類名.contextType = MyContext 的方式,在類中獲取context;

多個Context或者在函數(shù)式組件中通過 MyContext.Consumer 方式共享context;

但是多個Context共享時的方式會存在大量的嵌套(會導致代碼閱讀性非常差):

Context Hook允許我們通過Hook來直接獲取某個Context的值, 相對于class組件中的使用方式會簡單非常多;

例如定義兩個Context

import { createContext } from "react";

const InfoContext = createContext()
const ThemeContext = createContext()

export {
  InfoContext,
  ThemeContext
}

依然需要使用InfoContext和ThemeContext將組件包裹起來

const root = ReactDOM.createRoot(document.querySelector("#root"))
root.render(
  <InfoContext.Provider value={{name: "chenyq", age: 18}}>
    <ThemeContext.Provider value={{color: "red"}}>
      <App/>
    </ThemeContext.Provider>
  </InfoContext.Provider>
)

在要使用的地方, 通過useContetx這個hook函數(shù)可以直接獲取到值

import React, { memo } from 'react'
import { useContext } from 'react'
import { InfoContext, ThemeContext } from './index'

const App = memo(() => {
  // 通過hook拿到共享的數(shù)據(jù)
  const info = useContext(InfoContext)
  const theme = useContext(ThemeContext)
  return (
    <div>
      {/* 展示共享的數(shù)據(jù) */}
      <h2>{info.name}-{info.age}</h2>
      <h2>{theme.color}</h2>
    </div>
  )
})

export default App

注意事項:

當組件上層最近的 <MyContext.Provider> 更新時,該 Hook 會觸發(fā)重新渲染,并使用最新的值傳遞給 MyContext provider 的 context value 值。

useReducer的使用

很多人看到useReducer的第一反應應該是redux的某個替代品,其實并不是。

useReducer僅僅是useState的一種替代方案:

在某些場景下,如果state的處理邏輯比較復雜,我們可以通過useReducer來對其進行拆分;

或者這次修改的state需要依賴之前的state時,也可以使用;

useReducer函數(shù)使用過程如下:

例如我們先定義一個reducer函數(shù)

// 定義一個reducer函數(shù)
function reducer(state, action) {
  switch(action.type) {
    case "incremment":
      return {...state, counter: state.counter + action.num}
    case "decremment":
      return {...state, counter: state.counter - action.num}
    default: 
      return state
  }
}

再在函數(shù)組件中通過useReducer函數(shù)將我們定義的reducer函數(shù)使用起來

import React, { memo } from 'react'
import { useReducer } from 'react'

// 定義一個reducer函數(shù)
function reducer(state, action) {
  switch(action.type) {
    case "incremment":
      return {...state, counter: state.counter + action.num}
    case "decremment":
      return {...state, counter: state.counter - action.num}
    default: 
      return state
  }
}

// 函數(shù)組件
const App = memo(() => {
  // 第一個參數(shù)傳reducer, 第二個參數(shù)初始化值
  const [state, dispatch] = useReducer(reducer, { counter: 0 })

  return (
    <div>
      {/* 使用reducer函數(shù)中的state */}
      <h2>當前計數(shù): {state.counter}</h2>
      {/* 派發(fā)action通過reducer函數(shù)修改counter */}
      <button onClick={() => dispatch({type: "incremment", num: 5})}>+5</button>
      <button onClick={() => dispatch({type: "decremment", num: 5})}>-5</button>
    </div>
  )
})

export default App

數(shù)據(jù)是不會共享的,它們只是使用了相同的counterReducer的函數(shù)而已。

所以,useReducer只是useState的一種替代品,并不能替代Redux。

到此這篇關于React Hooks - useContetx和useReducer的基本使用的文章就介紹到這了,更多相關React Hooks基本使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • React路由封裝的實現(xiàn)淺析

    React路由封裝的實現(xiàn)淺析

    路由是React項目中相當重要的概念,對于功能較為復雜的網(wǎng)頁來說,必然會涉及到不同功能間的頁面跳轉,本篇文章將對React官方維護的路由庫React-Router-Dom的使用和常用組件進行講解,同時對路由組件傳遞param參數(shù)的方式進行講解,希望對各位讀者有所參考
    2022-08-08
  • 解決React在安裝antd之后出現(xiàn)的Can''t resolve ''./locale''問題(推薦)

    解決React在安裝antd之后出現(xiàn)的Can''t resolve ''./locale''問題(推薦)

    這篇文章主要介紹了解決React在安裝antd之后出現(xiàn)的Can't resolve './locale'問題,本文給大家分享解決方案,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • react如何實現(xiàn)一個密碼強度檢測器詳解

    react如何實現(xiàn)一個密碼強度檢測器詳解

    這篇文章主要給大家介紹了關于react如何實現(xiàn)一個密碼強度檢測器的相關資料,使用這個密碼強度器后可以幫助大家提高在線帳號、個人信息的安全性,需要的朋友可以參考下
    2021-06-06
  • react-router4 配合webpack require.ensure 實現(xiàn)異步加載的示例

    react-router4 配合webpack require.ensure 實現(xiàn)異步加載的示例

    本篇文章主要介紹了react-router4 配合webpack require.ensure 實現(xiàn)異步加載的示例,非常具有實用價值,需要的朋友可以參考下
    2018-01-01
  • React 組件間的通信示例

    React 組件間的通信示例

    這篇文章主要介紹了React 組件間的通信示例,主要通信劃分為三種,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • React?antd中setFieldsValu的簡便使用示例代碼

    React?antd中setFieldsValu的簡便使用示例代碼

    form.setFieldsValue是antd?Form組件中的一個方法,用于動態(tài)設置表單字段的值,它接受一個對象作為參數(shù),對象的鍵是表單字段的名稱,值是要設置的字段值,這篇文章主要介紹了React?antd中setFieldsValu的簡便使用,需要的朋友可以參考下
    2023-08-08
  • 初識React及React開發(fā)依賴詳解

    初識React及React開發(fā)依賴詳解

    React由Facebook來更新和維護,它是大量優(yōu)秀程序員的思想結晶,React的流行不僅僅局限于普通開發(fā)工程師對它的認可,大量流行的其他框架借鑒React的思想,接下來通過本文介紹React基礎及React開發(fā)依賴介紹,需要的朋友可以參考下
    2022-10-10
  • 詳解升級react-router 4 踩坑指南

    詳解升級react-router 4 踩坑指南

    本篇文章主要介紹了詳解升級react-router 4 踩坑指南,主要是對react-router 4升級的踩坑總結,有興趣的可以了解一下
    2017-08-08
  • React中的Props類型校驗和默認值詳解

    React中的Props類型校驗和默認值詳解

    這篇文章主要為大家詳細介紹了React中的Props類型校驗和默認值,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • react學習筆記之state以及setState的使用

    react學習筆記之state以及setState的使用

    這篇文章主要介紹了react學習筆記之state以及setState的使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12

最新評論