首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

React Hook -仅监听窗口*宽度*大小的更改

React Hook是React框架中引入的一种新的函数组件编写方式。它允许开发者在不使用类组件的情况下,使用状态和其他React特性。

在React Hook中,可以使用useState Hook来定义状态,以及useEffect Hook来处理副作用。针对监听窗口宽度大小的更改,可以使用useEffect Hook结合window对象的resize事件来实现。

首先,我们需要导入useState和useEffect两个Hook函数:

代码语言:txt
复制
import React, { useState, useEffect } from 'react';

接下来,在函数组件中使用useState来定义窗口宽度状态变量和更新函数:

代码语言:txt
复制
const [windowWidth, setWindowWidth] = useState(window.innerWidth);

然后,使用useEffect来订阅window对象的resize事件,并在事件回调函数中更新窗口宽度状态:

代码语言:txt
复制
useEffect(() => {
  const handleResize = () => {
    setWindowWidth(window.innerWidth);
  };

  window.addEventListener('resize', handleResize);

  return () => {
    window.removeEventListener('resize', handleResize);
  };
}, []);

在useEffect的第一个参数中,我们传入一个回调函数,这个回调函数会在组件渲染时执行一次,以及window.innerWidth发生变化时执行。在回调函数中,我们定义了一个handleResize函数,用于更新窗口宽度状态。

在useEffect的第二个参数中,我们传入一个空数组,表示只在组件的初始渲染时执行一次,而不依赖任何其他依赖项。这样可以避免重复订阅和取消订阅resize事件。

最后,我们可以在组件中使用windowWidth状态来根据窗口宽度的变化来做出相应的响应:

代码语言:txt
复制
return (
  <div>
    <p>当前窗口宽度:{windowWidth}px</p>
  </div>
);

这样,我们就可以实现监听窗口宽度大小的更改了。

关于腾讯云相关产品和产品介绍链接地址,建议参考腾讯云官方文档,其中可能包括但不限于:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

理解 React Hooks

,下面通过监听窗口宽度变化代码为例,说明 effect hooks 使用fangfa import { useState } from 'react'; function windowWidth(...window.innerWidth); } window.addEventListener('resize', handleResize); return () => { // 取消监听窗口宽度变化...Custom Hooks 自定义组件 接着上面的监听窗口大小代码,我们接着讲自定义 hooks, 证明 react hooks 是怎么使到组件内逻辑可复用。...(); return ( 当前窗口宽度是 {width} ) } 上面的代码只有几行,非常清晰明了说明了他作用就是监听当前窗口变化,这就是Hooks目标...我们使用React本地状态来保持当前窗口宽度,并在窗口调整大小时使用副作用来设置该状态 import { useState, useEffect} from 'react'; // custom hooks

5.3K140

亲手打造属于你 React Hooks

我决定创建自己钩子来提供窗口尺寸,包括宽度和高度,而不是引入整个第三方库。我把这个钩子叫做useWindowSize。...== "undefined") { return { width: 1200, height: 800 }; } } 如何从窗口得到宽度和高度 假设我们在客户端并且可以获得窗口,我们可以使用...我们将包含一个空dependencies数组,以确保effect函数只在组件(调用这个钩子组件)挂载之后才被调用。 为了找出窗口宽度和高度,我们可以添加一个事件监听器来监听resize事件。...我们需要删除调整大小监听器。 如何删除 resize 事件监听器 你可以通过从useEffect 返回一个函数来做到这一点。我们将使用window.removeEventListener删除侦听器。...useWindowSize"; function StickyHeader() { const { width } = useWindowSize(); return ( {/* 窗口大于

10.1K60

React Hook案例集锦

React Hook本质就是一个函数,其名称以 “use” 开头,函数内部可以调用其他 hook,结果一般会有返回值,使用hook目的一般是抽离多个组件公共逻辑,本文以6个案例来带大家熟悉React...首先看第一个案例,一个简单Hook函数,啥也没做,只是带大家熟悉一下hook定义形式: import { useState } from 'react' const useMyHook = (initValue...第三个案例:假设我们组件中有一个功能可以检索窗口宽度。我们想知道用户何时调整屏幕大小。... ); }; 我们这里有一个具有onSmallScreen state组件,该组件知道我们是否在宽度小于768像素窗口中。...接下来我们将其中获取页面宽度代码抽离出来构造一个hook: import { useState, useEffect } from "react"; const useWindowsWidth =

1K00

第 002 期 聚集零散业务代码解决方案 - React Hook

React Class 组件中,常出现相关业务逻辑代码散在 componentDidMount, componentWillUpdate, componentWillUnmount 等生命周期函数中情况...这样代码可维护性差。查找或更改这块逻辑时,都要找多个地方。 解决方案 HookReact 16.8 新增特性。用 React Hooks 可以优雅聚集零散业务代码。...React Hooks 通过 useState,useEffect 来聚集代码。 我们来看个 Demo。实现:浏览器窗口大小变化时,将值传给服务器端。...useEffect(report, [windowSize]); 为了复用监听浏览器窗口大小逻辑,可以将这段业务抽象成自定义 Hook,如下: import {useState, useEffect}...来重构零散代码吧~ 参考文档 React Hook 你可能不知道流式 React Hooks(关于组织代码最佳实践)

62820

美丽公主和它27个React 自定义 Hook

而针对React Hook而言,除了那些让人眼花缭乱「内置hook」。其实,它最大魅力还是「自定义hook」。 所以,今天我们就来讲几个,我们平时开发中可能会用到自定义hook。...❞ React 内置Hook 以下是React提供一些标准内置Hooks。你能相信,现在有15个之多,如果大家有需要,到时候也可以写一篇关于内置hook文章。...一旦脚本成功加载,组件将使用jQuery显示当前窗口宽度。...此包还包括 useEventListener 钩子,它智能地「侦听窗口调整大小事件」。每当窗口大小更改时,useWindowSize 更新状态以反映最新尺寸,触发消耗组件重新渲染。...为了解决默认useEffect钩子限制,useDeepCompareEffect确保「当依赖关系发生深层更改时才触发效果回调」,它使用lodashisEqual函数进行准确比较。

61820

React Conf 2018 回顾】React 今天和明天 II —— React Hooks 提案

你可能想要去订阅一些浏览器 API,它会提供给你一些值,例如窗口大小。你需要组件随着这个 state 值改变更新。...这就是窗口宽度了,而不是 Mary Poppins 宽度。(大笑)我将添加一个,嗯,我将要添加一个事件监听,所以我们需要真真切切地监听这个 width 改变。...我们设置了一个事件监听,并且我们移除了这个事件监听。我们可以通过拖动窗口来验证。你看到这个 width 正在变化。运行正常。...从概念上来说,监听窗口宽度与设置文档标题无关。这就是为什么我们没有把它放入这个 useEffect 里原因。...如果我们想了解更多,我们可以滚动窗口到下面,可以看到,这就是输入框如何运行代码,这里是如何设置文档标题代码,而这里是如何设置并订阅窗口宽度代码。

2.8K30

React Hooks 学习笔记 | useEffect Hook(二)

大家好,上一篇文章我们学习了 State Hook 基础用法,还没看同学们,小编建议你先看下《 React Hooks 学习笔记 | State Hook(一)》这篇文章,今天我们一起来了解 useEffect...一、开篇 一般大多数组件都需要特殊操作,比如获取数据、监听数据变化或更改DOM相关操作,这些操作被称作 “side effects(副作用)”。...; } 当你尝试更改标题对应状态值时,页面的标题不会发生任何变化,你还需要添加另一个生命周期方法 componentDidUpdate() ,监听状态值变化重新re-render,示例代码如下:...当你调整窗口大小,您应该会看到自动更新窗口宽和高值,同时我们又添加了组件销毁时,在 componentWillUnmount() 函数中定义清除监听窗口大小逻辑。...如上图运行效果所示,你会发现 Hook 函数中定义输出,无论我们怎么更改状态值,其只输出一次。

8.2K30

React Hook实战

一、 Hook 简介 1.1 Hook历史 在React Hook出现之前版本中,组件主要分为两种:函数式组件和类组件。...在React中,数据获取、设置订阅、手动更改 DOM都可以称为副作用,可以将副作用分为两种,一种是需要清理,另外一种是不需要清理。比如网络请求、DOM 更改、日志这些副作用都不要清理。...而比如定时器,事件监听则是需要处理,而useEffect让开发者可以处理这些副作用。 下面是使用useEffect更改document.title标题示例,代码如下。...count + 1)}}>点我 ) } export default App; 在上面例子中,我们需要处理两种副作用,即既要处理title,还要监听屏幕宽度改变...,而子组件内部通过 ref 更改 current 对象后组件不会重新渲染,需要改变 useState 设置状态才能更改

2K00

React教程:组件,Hooks和性能

React 组件 此外,如果一个组件大于 2 到 3 个窗口高度,也许值得分离(如果可能的话) —— 以后更容易阅读。...可能会删除 HOC 并在你应用中渲染 props ,尽管 hook 被设计用于解决其他问题,但仍会引入新问题。 能够被熟练React开发人员定制 默认 React hook 很少。...useState hook,我们将其指定为窗口宽度初始值,然后在 useEffect 中添加一个监听器,它将在窗口调整大小时触发 handleResize。...这取决于文件大小,有时你需要自己去尝试。 代码拆分 代码拆分方式比这里给出建议多得多,但让我们关注 CRA 和 React 本身可用内容。...你可以使用 import 和 React.lazy 进行动态路由划分(例如:管理员与常规用户)。请注意,React.lazy 支持默认导出,并且不支持服务器端呈现。

2.6K30

分享 10 个有用 Vue.js 自定义 Hook

在本文中,我将向分享 10 个可以使用 Vue.js 制作有用自定义钩hook。 01、使用窗口调整大小 这是一个基本hook。...只需一个简单hook——useStorage,一切就变得如此简单。 我们只需要创建一个hook,返回从存储中获取数据,以及一个在我们想要更改数据时将数据存储在存储中函数。 这是我代码。...为了实现这个hook,我们需要为“在线”和“离线”事件添加事件监听器。 在事件中,我们只是调用一个回调函数,参数为网络状态。...' not' : ''} focus your site`); }); 07、使用视口 在第一个自定义hook中,我们构建了useWindowRezie,它可以帮助我们查看窗口的当前宽度和高度。...在此hook中,我将使用 useWindowResize 构建相同内容,但它返回设备名称而不是宽度和高度值。 这是这个hook代码。

34631

前端精神小伙:React Hooks 响应式布局

但是,有时在 React 程序中,需要根据屏幕大小有条件地渲染不同组件(写媒体查询太麻烦了,还不如另写组件),其实使用React Hooks,可以更灵活实现。 ?...方案一:innerWidth 一个很简单粗略方案,是个前端都知道: const MyComponent = () => { // 当前窗口宽度 const width = window.innerWidth... : ; } 这个简单解决方案肯定会起作用。根据用户设备窗口宽度,我们可以呈现桌面视图或手机视图。...但是,当调整窗口大小时,未解决宽度更新问题,可能会渲染错误组件。 ? 2. 方案二:Hooks+resize 说着也简单,监听resize事件时,触发useEffect改变数据。...4.终极方案:Hooks+Context 我们将创建一个新文件viewportContext,在其中可以存储当前视口大小状态以及计算逻辑。

2.5K30

Note·React Hook

React HookReact 16.8 新增特性。它可以让你在不编写 class 情况下使用 state 以及其他 React 特性。 拥抱 React Hook 什么是 Hook?...数据获取,设置订阅以及手动更改 React 组件中 DOM 都属于副作用。React 组件中常见副作用一般分不需要清除和需要清除两种类型。...需要清除 Effect 上面的动态修改标签页标题副作用属于不需要清除副作用,而事件监听器属于需要清除副作用。...为了防止引起内存泄露,在 class 组件中,会在 componentDidMount 添加事件监听,然后在 componentWillUnmount 生命周期中移除事件监听,但这样会让处理同一个功能逻辑代码分布在两个不同地方...这里再举个栗子说明,现在我们要让组件加载时设置监听窗口缩放事件,组件销毁时移除: import React, { useState, useEffect } from 'react' export

2.1K20

一篇看懂 React Hooks

状态与 UI 界限会越来越清晰 因为 React Hooks 特性,如果一个 Hook 不产生 UI,那么它可以永远被其他 Hook 封装,虽然允许有副作用,但是被包裹在 useEffect 里,总体来说还是挺函数式...DOM 副作用修改 / 监听 做一个网页,总有一些看上去和组件关系不大麻烦事,比如修改页面标题(切换页面记得改成默认标题)、监听页面大小变化(组件销毁记得取消监听)、断网时提示(一层层装饰器要堆成小山了...而 React Hooks 特别擅长做这些事,造这种轮子,大小皆宜。 由于 React Hooks 降低了高阶组件使用成本,那么一套生命周期才能完成 “杂耍” 将变得非常简单。...,我们对组件增强时,组件回调一般不需要销毁监听,而且监听一次,这与 DOM 监听不同,因此大部分场景,我们需要利用 useCallback 包裹,并传一个空数组,来保证永远只监听一次,而且不需要在组件销毁时注销这个...维护者,怎么样最小成本支持 React Hook?

3.7K20

React-Hooks-自定义Hook

自定义 Hook 概述通过自定义 Hook,可以对其它 Hook 代码进行复用官方文档地址:https://react.docschina.org/docs/hooks-custom.html假如现在博主有这么一个需求...,就是定义两个组件然后在 App 根组件当中进行使用,使用时候分别为定义两个组件添加监听, 移除监听:import React, {useEffect, useState} from 'react'...注意点,在 React 中只有两个地方可以使用 Hook:函数式组件中自定义 Hook 中自定义一个 Hooks只要在函数名称前面加上 use, 那么就表示这个函数是一个自定义 Hook, 就表示可以在这个函数中使用其它...Hook好了了解了这些知识点之后,我们接下来就可以解决我们如上示例报错了,更改代码如下:import React, {useEffect, useState} from 'react';function...,应该目前是还对自定义 Hook 印象是不太深,因为如上示例我们只是简简单单打印了文字,不够贴近我们实际开发,所以博主这里在进行编写一个贴近实际开发真实案例来巩固一下:import React

16330

精读《怎么用 React Hooks 造轮子》

DOM 副作用修改 / 监听 做一个网页,总有一些看上去和组件关系不大麻烦事,比如修改页面标题(切换页面记得改成默认标题)、监听页面大小变化(组件销毁记得取消监听)、断网时提示(一层层装饰器要堆成小山了...而 React Hooks 特别擅长做这些事,造这种轮子,大小皆宜。 由于 React Hooks 降低了高阶组件使用成本,那么一套生命周期才能完成 “杂耍” 将变得非常简单。...,我们对组件增强时,组件回调一般不需要销毁监听,而且监听一次,这与 DOM 监听不同,因此大部分场景,我们需要利用 useCallback 包裹,并传一个空数组,来保证永远只监听一次,而且不需要在组件销毁时注销这个...这里用到了 hook 调用 hook 联动(通过 useRaf 驱动 useTween),还可以在其他地方举一反三。...维护者,怎么样最小成本支持 React Hook?

2.4K40

三种React代码复用技术

React 代码复用 如何自己编写一个 react hookreact 允许我们自己编写 Hook。 场景 我们有几个组件,它们都要先进行 ajax 请求,获取到数据,然后把数据渲染到页面上。...高阶组件 如果要使用高阶组件形式复用代码逻辑,就需要写一个函数,这个函数接收 React 组件作为参数,然后再返回一个新 React 组件。...Hook,只在最顶层使用 Hook; 只在 React 函数中调用 Hook,不要在普通 JavaScript 函数中调用 Hook; 改造 App 组件中内容: import React, { useState..., useEffect } from "react"; // 自定义 hook,接收 url 作为参数 function useFetch(url){ let [data, setData]...useWinSize 假如我们想要获取到文档可视区域宽高,当窗口大小发生改变时也要获取到准确宽度、高度数据,就可以自定义一个 Hook 来完成这个任务。

2.3K10

逐步拆解React组件—Swipe轮播图

,gzip压缩后大小3.7kb,源码地址、示例地址 思路回顾 核心思想是利用视觉上感觉,在用户无感情况下切换回去,这里有一个思路和以前有点不同,切换回去这个动作改在了切换时候进行复位重置并且弃用用了之前...轮播移动主要依靠改变外层容器transfrom属性进行偏移,布局核心在于动态计算SwipeItem宽度和移动容器宽度(SwipeItem宽度 * SwipeItem个数)。...(props.children), [props.children]); // 获取容器宽度和高度 const { size, root } = useRect([count]); // 获取SwipeItem高度/宽度值 const itemSize = useMemo(() => vertical ?...核心内容均封装在一个useSwipehook方法里面,通过useSwipe暴露方法,后期去实现自动播放、手势滑动等等功能 // Swipe.tsx ...同上省略 // 核心方法

3.4K10

react-grid-layout 之核心代码分析与实践

介绍 React Grid Layout 是一个用于构建可拖拽、可调整大小和自适应网格布局 React 组件库。...Component A Component B ); }; 断点布局实现关键是获取并监听屏幕宽度变化...现在我们知道了如何获取元素宽度,当我们缩放视图窗口时,需要判断目前视图窗口宽度处于哪个断点范围内,这时候我们用到方法是 onWidthChange,该方法会监听每一次宽度变化,根据新窗口宽度和断点信息...另外还有 js 原生方法 window.innerWidth 获取屏幕宽高并通过 window.addEventListener 监听宽度变化。 3.2 网格布局实现 什么是网格布局?...代码如下: mixinResizable() { const positionParams = this.getPositionParams(); // 计算最大宽度,不能超过窗口宽度

1.5K20

React Hooks 快速入门与开发体验(一)

那什么是 React Hook 呢?官方介绍如下: HookReact 16.8 新增特性。它可以让你在不编写 class 情况下使用 state 以及其他 React 特性。...并且官方保证它 没有破坏性改动: React Hook 是: 完全可选,可以轻松引入。如果你不喜欢,也可以不去学习和使用。 100% 向后兼容,React Hook 不会包含任何破坏性改动。...至于支持 Hook React 版本,大约发布于2018年底。到本文2021年初算来,差不多已经过去两年时间了。...不过需要注意 React Hook 使用规则: 只能在 函数最外层 调用 Hook。 只能在 React 函数组件 中调用 Hook。...这里 effect,官方称呼为“副作用”: 数据获取,设置订阅以及手动更改 React 组件中 DOM 都属于副作用。

1K30
领券