React useContext與useReducer函數(shù)組件使用
useContext
介紹
與class中寫法對(duì)比減少了代碼量,省去了返回回調(diào)函數(shù)獲取傳來的值
使用
/** * useContext(減少組件層級(jí)) */ import React, { useState, useRef, useContext } from 'react'; const GlobalContext=React.createContext()//創(chuàng)建Context對(duì)象 function FilmItem(){ const value=useContext(GlobalContext) console.log(value)//可以拿到傳過來的value return( <div> <span>{value.name}CSDN碰磕</span> </div> ) } export default function MyContext() { return ( //供應(yīng)商 <GlobalContext.Provider value={{ name:"碰磕", age:18 }}> <div> Context方案 <FilmItem></FilmItem> </div> </GlobalContext.Provider> ); }
通過**useContext(GlobalContext)**就可以獲取到傳來值
useReducer
介紹
將多個(gè)state放到對(duì)象中,進(jìn)行統(tǒng)一管理
使用(簡單示例實(shí)現(xiàn)計(jì)算器)
/** * useReducer(減少組件層級(jí)) */ import React, {useReducer } from 'react'; //處理函數(shù) const reducer=(pervState,action)=>{ //第一個(gè)參數(shù)是原數(shù)據(jù),第二個(gè)參數(shù)是傳來的數(shù)據(jù) let newarr={...pervState};//定義新對(duì)象拷貝 switch(action.type){ case "pengke-jian": newarr.count-- return newarr case "pengke-jia": newarr.count++ return newarr default: return pervState } } //外部的對(duì)象 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整合
實(shí)現(xiàn)多個(gè)組件通過他們倆互相通信傳值…
/** * 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> }
到此這篇關(guān)于React useContext與useReducer函數(shù)組件使用的文章就介紹到這了,更多相關(guān)React useContext與useReducer內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
React實(shí)現(xiàn)路由鑒權(quán)的實(shí)例詳解
React應(yīng)用中的路由鑒權(quán)是確保用戶僅能訪問其授權(quán)頁面的方式,用于已登錄或具有訪問特定頁面所需的權(quán)限,這篇文章就來記錄下React實(shí)現(xiàn)路由鑒權(quán)的流程,需要的朋友可以參考下2024-07-07React Router V5:使用HOC組件實(shí)現(xiàn)路由攔截功能
這篇文章主要介紹了React Router V5:使用HOC組件實(shí)現(xiàn)路由攔截功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03react 實(shí)現(xiàn)頁面代碼分割、按需加載的方法
本篇文章主要介紹了react 實(shí)現(xiàn)頁面代碼分割、按需加載的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04React函數(shù)組件useContext useReducer自定義hooks
這篇文章主要為大家介紹了React函數(shù)組件useContext useReducer自定義hooks示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08