首页 > 其他分享 >react Hooks+Context 实现响应式布局

react Hooks+Context 实现响应式布局

时间:2023-12-22 15:46:04浏览次数:35  
标签:React const Context Hooks react width window tsx import

1. 创建文件  viewportContext.tsx 

import React from "react";

const defaultValue = {     width: window.innerWidth } const viewportContext = React.createContext(defaultValue);
const ViewportProvider = ({ children }) => {     const [width, setWidth] = React.useState(window.innerWidth);     const handleWindowResize = () => {         setWidth(window.innerWidth);     }     React.useEffect(() => {         window.addEventListener("resize", handleWindowResize);         return () => window.removeEventListener("resize", handleWindowResize);     }, []);     return (         <viewportContext.Provider value={{ width }}>             {children}         </viewportContext.Provider>     ); };
const useViewport = () => {     const { width } = React.useContext(viewportContext);     return { width }; }
export { ViewportProvider, useViewport }   2. index.tsx import { ViewportProvider } from './utils/viewportContext.tsx' <ViewportProvider>       <RouterProvider router={router} />   </ViewportProvider>   3. 页面中使用 import { lazy } from "react" const PcHome = lazy(() => import('./pc.tsx')) const PhoneHome = lazy(() => import('./phone.tsx')) import { useViewport } from "../../utils/viewportContext.tsx" const Home = () => {     const { width } = useViewport()     const breakpoint = 720     return width < breakpoint ? <PhoneHome /> : <PcHome /> } export default Home    

标签:React,const,Context,Hooks,react,width,window,tsx,import
From: https://www.cnblogs.com/zscxy/p/17921730.html

相关文章

  • React 之使用 antd 实现全局 loading
    使用antd的Spin实现Loading代码如下:fullLoading.tsximportReactDOMfrom"react-dom/client";import{Spin}from"antd";//全局加载loading//当前请求的个数//当同时有多个请求时,等所有请求完成后再关闭loadingletreqCount=0;//显示loadingfuncti......
  • React项目中报错:Parsing error: The keyword 'import' is reservedeslint
    记得更改完配置后,要重启编辑器(如:VSCode)!!!记得更改完配置后,要重启编辑器(如:VSCode)!!!记得更改完配置后,要重启编辑器(如:VSCode)!!!这个错误通常发生在你尝试在一个不支持ES6模块语法的环境中使用import关键字。ESLint默认使用的是ES5语法,如果你想使用ES6或者更新的语法,你......
  • React Hooks的使用规范和最佳实践
    ReactHooks自从推出以来,彻底改变了React组件的编写方式。它们提供了一种在函数组件中使用state和其他React特性的能力,从而使得函数组件更加强大和灵活。本文将深入探讨useEffect、useMemo、useCallback和useState这四种常用Hooks的特点、优缺点,以及它们对组件性能的影响。我们还......
  • DBus.server服务启动报错->"/etc/selinux/*/contexts/dbus_contexts": No such file o
    系统启动后很多使用dbus1的命令没法使用,查看日志发现dbus.service没有启动,并伴随下面报错:Failedtostartmessagebus:Failedtoopen"/etc/selinux/targeted/contexts/dbus_contexts":Nosuchfileordirector 进入到该目录后发现缺少这个文件,经过简单搜索发现这个由......
  • 100道React高频题整理(附答案背诵版)
    1、简述React有什么特点?React是一个用于构建用户界面的JavaScript库,由Facebook开发并维护。React有以下几个主要特点:声明式设计:React采用声明式设计,让代码更易于理解,且方便调试。你只需描述出你希望程序的最终状态,React会自动确保用户界面与你描述的状态保持一致。组件化:......
  • 让你 React 组件水平暴增的 5 个技巧
    让你React组件水平暴增的5个技巧神说要有光​ ​关注他 你经常看TA的内容最近看了一些AntDesign的组件源码,学到一些很实用的技巧,这篇文章来分享一下。首先,我们用create-react-app创建个React项目(选择typescript模版):npxcreate-r......
  • Adaptive Sparse Convolutional Networks with Global Context Enhancement for Faste
    AdaptiveSparseConvolutionalNetworkswithGlobalContextEnhancementforFasterObjectDetectiononDroneImages*Authors:[[BoweiDu]],[[YechengHuang]],[[JiaxinChen]],[[DiHuang]]初读印象comment::提出了一种新型全局上下文增强自适应稀疏卷积网络(CEAS......
  • #yyds干货盘点#在 React Router 中使用 JWT
    创建一个React项目使用下方的指令会为我们创建一个项目$npmcreatevite@latestreact-jwt-cn然后我们选择 react 和 javascript 作为我们的框架和语言。在项目开始之前,我们要确保所有的依赖都已经被安装,所以我们要先执行$npminstall安装完毕后,在项目的根目录下,我们可以运......
  • GCGP:Global Context and Geometric Priors for Effective Non-Local Self-Attention加
    GlobalContextandGeometricPriorsforEffectiveNon-LocalSelf-Attention*Authors:[[WooS]]初读印象comment::(GCGP)提出了一个新的关系推理模块,它包含了一个上下文化的对角矩阵和二维相对位置表示。动机普通注意力的缺点:单独处理输入图像中的每个特征,并在整个输......
  • React useEffect 在组件挂载时运行了两次
    在使用useEffect这个hook时,发现useEffect会执行2次useEffect(()=>{console.log("执行useEffect");},[]);控制台输出:执行useEffect执行useEffect查看疑难解答官方文档,官方解释如下:在开发环境下,如果开启严格模式,React会在实际运行setup之前额外运行一次......