1.useContext與useReducer
主要思想:
1.使用redux的action以及dispatch方法將數據存在一個組件中;
2.使用createContext,useContext進行父子組件傳值;
import React ,{ }from 'react';
import { Content } from './content'
import { Color } from './color'
//index頁面
export const Index =()=>{
return(
<div>
{/* Color組件作為父組件作為包裹 */}
<Color>
{/* 注意父子關系才能使用 */}
<Content />
</Color>
</div>
)
}
//起存儲數據的redux頁面,父組件
import React ,{ createContext,useReducer } from 'react';
export const Context = createContext({})
{/* reducer作為變量而不是函數*/}
const reducer = (state,action)=>{
switch (action.type){
case 'update_color':
return action.color
default :
return 'purple'
}
}
export const Color =props=>{
{/* props是指包含子組件的結構 */}
const [color,dispatch] = useReducer(reducer,'purple')
return (
<Context.Provider value={{color,dispatch}}>
{props.children}
</Context.Provider>
)
}
//操作數據的子組件
import React ,{ useState ,useContext }from 'react';
import { Context } from './color'
export const Content =()=>{
{/* 這里是對象,不是數組,value是對象 */}
const {color,dispatch} = useContext(Context)
return(
<div>
<p style={{color:color}}>字體顏色是:{color}</p>
<button onClick={()=>{dispatch({type:'update_color',color:'green'})}}>green</button>
<button onClick={()=>{dispatch({type:'update_color',color:'red'})}}>red</button>
</div>
)
}
作者:start_zjj
鏈接:https://www.jianshu.com/p/99d7b07ff711
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
