import React, { createContext, useContext, useReducer } from 'react'; interface InitStateType { mapType: string; } const initState: InitStateType = { mapType: '3D', }; interface ContextType { state: InitStateType, dispatch: React.Dispatch<{ type: string; data: InitStateType }>, } let MapContext = createContext<ContextType>({ state: initState, dispatch: () => { } }); const reducer = (state: InitStateType, action: { type: string, data: InitStateType }) => { switch (action.type) { case 'changeType': return { ...state, ...action.data }; default: return { ...state }; } }; const MapProvider = (props: { children: React.ReactChild; }) => { const [state, dispatch] = useReducer(reducer, initState); return ( <MapContext.Provider value={{ state, dispatch }}> {props.children} </MapContext.Provider> ); }; export const usePageContext = () => { const context = useContext(MapContext); if (!context) { throw ('只能在函数组件中使用') } return { ...context } } export { MapContext, MapProvider };
正文
react的useContext简单示例
文章版权声明:除非注明,否则均为
譬如朝露_策温技术开发工作室博客原创文章,转载或复制请以超链接形式并注明出处。
发表评论
侧栏公告
寄语
譬如朝露博客是一个分享前端知识的网站,联系方式11523518。
热评文章
标签列表
热门文章
友情链接