React useContext與useReducer函數(shù)組件使用
useContext
介紹
與class中寫法對比減少了代碼量,省去了返回回調函數(shù)獲取傳來的值
使用
/**
* useContext(減少組件層級)
*/
import React, { useState, useRef, useContext } from 'react';
const GlobalContext=React.createContext()//創(chuàng)建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放到對象中,進行統(tǒng)一管理
使用(簡單示例實現(xiàn)計算器)
/**
* useReducer(減少組件層級)
*/
import React, {useReducer } from 'react';
//處理函數(shù)
const reducer=(pervState,action)=>{ //第一個參數(shù)是原數(shù)據(jù),第二個參數(shù)是傳來的數(shù)據(jù)
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整合
實現(xiàn)多個組件通過他們倆互相通信傳值…
/**
* 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>
}
到此這篇關于React useContext與useReducer函數(shù)組件使用的文章就介紹到這了,更多相關React useContext與useReducer內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- React?的?useReducer?和?Redux?的區(qū)別及什么情況下應該使用?useReducer
- 詳解React如何使用??useReducer???高階鉤子來管理狀態(tài)
- 一文帶你搞懂React中的useReducer
- React組件useReducer的講解與使用
- React Hooks - useContetx和useReducer的使用實例詳解
- React超詳細分析useState與useReducer源碼
- React useReducer終極使用教程
- React?Hooks useReducer?逃避deps組件渲染次數(shù)增加陷阱
- react中useReducer復雜狀態(tài)管理
相關文章
React+umi+typeScript創(chuàng)建項目的過程
這篇文章主要介紹了React+umi+typeScript創(chuàng)建項目的過程,結合代碼介紹了項目框架搭建的方式,本文給大家講解的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-02-02
解決React報錯`value` prop on `input` should&
這篇文章主要為大家介紹了React報錯`value` prop on `input` should not be null解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12
React-Native中禁用Navigator手勢返回的示例代碼
本篇文章主要介紹了React-Native中禁用Navigator手勢返回的示例代碼,具有一定的參考價值,有興趣的可以了解一下2017-09-09
react?路由權限動態(tài)菜單方案配置react-router-auth-plus
這篇文章主要為大家介紹了react路由權限動態(tài)菜單方案react-router-auth-plus傻瓜式配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08
react項目中express動態(tài)路由未能匹配造成的404問題解決
本文主要介紹了react項目中express動態(tài)路由未能匹配造成的404問題解決,解決了白屏的問題,具有一定的參考價值,感興趣的可以了解一下2023-09-09

