網站首頁 編程語言 正文
useContext
介紹
與class中寫法對比減少了代碼量,省去了返回回調函數獲取傳來的值
使用
/**
* useContext(減少組件層級)
*/
import React, { useState, useRef, useContext } from 'react';
const GlobalContext=React.createContext()//創建Context對象
function FilmItem(){
const value=useContext(GlobalContext)
console.log(value)//可以拿到傳過來的value
return(
<div>
<span>{value.name}CSDN碰磕</span>
</div>
)
}
export default function MyContext() {
return (
//供應商
<GlobalContext.Provider value={{
name:"碰磕",
age:18
}}>
<div>
Context方案
<FilmItem></FilmItem>
</div>
</GlobalContext.Provider>
);
}
通過**useContext(GlobalContext)**就可以獲取到傳來值
useReducer
介紹
將多個state放到對象中,進行統一管理
使用(簡單示例實現計算器)
/**
* useReducer(減少組件層級)
*/
import React, {useReducer } from 'react';
//處理函數
const reducer=(pervState,action)=>{ //第一個參數是原數據,第二個參數是傳來的數據
let newarr={...pervState};//定義新對象拷貝
switch(action.type){
case "pengke-jian":
newarr.count--
return newarr
case "pengke-jia":
newarr.count++
return newarr
default:
return pervState
}
}
//外部的對象
const intialState={
count:0,
}
export default function MyReducer() {
const [state,dispatch]=useReducer(reducer,intialState)
return (
<div>
<button onClick={()=>{
dispatch({
type:"pengke-jian"
})
}}>-</button>
<span>{state.count}</span>
<button onClick={()=>{
dispatch({
type:"pengke-jia"
})
}}>+</button>
</div>
)
}
將useContext與useReducer整合
實現多個組件通過他們倆互相通信傳值…
/**
* useReducer+useContext
*/
import React, {useContext, useReducer } from 'react';
const intialState={
num1:"666",
num2:"碰磕"
}
const reducer=(state,action)=>{
let newarr={...state};
switch(action.msg){
case "change-num1":
newarr.num1=action.value
return newarr
case "change-num2":
newarr.num2=action.value
return newarr
default:
return newarr
}
}
const GlobalContext = React.createContext();
export default function MyReducer2() {
const [state,dispatch]=useReducer(reducer,intialState)
return (
<GlobalContext.Provider value={
{
state,dispatch
}
}>
<div>
<Children1 />
<Children2 />
<Children3 />
</div>
</GlobalContext.Provider>
)
}
function Children1(){
const {dispatch}=useContext(GlobalContext)//這里傳值
return <div style={{background:"red"}}>
<button onClick={()=>{
dispatch({
msg:"change-num1",
value:"被我修改了num1哈哈哈"
})
}}>改變值1</button>
<button onClick={()=>{
dispatch({
msg:"change-num2",
value:"被我修改了num2哈哈哈"
})
}}>改變值2</button>
</div>
}
function Children2(){
const {state}=useContext(GlobalContext)//拿到值
return <div style={{background:"orange"}}>Children2---{state.num1}</div>
}
function Children3(){
const {state}=useContext(GlobalContext)//拿到值
return <div style={{background:"skyblue"}}>Children3---{state.num2}</div>
}
原文鏈接:https://blog.csdn.net/m_xiaozhilei/article/details/125291097
相關推薦
- 2022-05-05 Python學習之集合的常用方法總結_python
- 2022-08-20 docker鏡像alpine中安裝oracle客戶端_docker
- 2022-09-02 Redis?單機安裝和哨兵模式集群安裝的實現_Redis
- 2022-11-03 關于golang?test緩存問題_Golang
- 2022-06-08 淺析C++可變參數模板的展開方式_C 語言
- 2023-08-13 element表單組件的trigger表單驗證邏輯規則
- 2022-04-09 idea解決sun.misc.BASE64Encoder 類找不到報錯
- 2023-04-07 一文詳解如何用GPU來運行Python代碼_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支