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

亲手打造属于你的 React Hooks

然而,我不想使用第三方库,而是想用自己的自定义 React 钩子重新创建这个功能。...为此,我们可以使用一个媒体查询(CSS),或者使用一个自定义的React钩子来提供当前页面的大小,并隐藏或显示JSX中的链接。 以前,我使用的是一个名为react-use的库中的钩子。...所以我需要创建自己的解决方案来检查用户何时使用移动设备。为此,我决定创建一个名为useDeviceDetect的自定义钩子。...我们所要做的就是获取我们得到的字符串,并使用.match()方法和一个regex来查看它是否是这些字符串中的任何一个。我们将它存储在一个叫做mobile的局部变量中。...我希望能让您更好地了解何时以及如何创建自己的React钩子。您可以在自己的项目中随意使用这些钩子和上面的代码,并以此为灵感创建自己的自定义React钩子。

10.1K60

系统学习React的技术关键词

学习React的先决条件 在学习React或尝试学习React之前,我想说的是要熟悉HTML、CSS和JavaScript。...不要只是学习和学习,还要创建小项目来实现你所获得的知识。你可以创建一些小型项目,如待办事项列表、计算器、随机笑话生成器等。...但是,让我告诉你,作为一个初学者,你需要学习足够多的东西,这样你就可以用普通的JavaScript创建基本项目。...一旦你对这些主题有了了解,你就可以创建项目来实现它们了。你可以创建新的项目,或者重新制作你在使用React学习虚构的JavaScript时做的项目。 React 路由 了解React router。...现在你只需要通过创建项目和经常访问React文档并学习新东西来磨练你的技能。

1.9K114
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    如何学习 React - 有效的方法

    至少花一两个月的时间学习 JavaScript。不要只是学习和学习,还要创建小项目来实现您所获得的知识。您可以创建一些迷你项目,例如待办事项列表、计算器、随机笑话生成器等。...但是,让我告诉您,作为初学者,您需要学习足够的知识,以便您可以使用 vanilla JavaScript 创建基本项目。...您可以创建新项目或重新制作您在使用 React 学习普通 JavaScript 时所做的项目。 React路由器 了解 React 路由器。...现在你只需要通过创建项目和经常访问 React Docs 并学习新事物来磨练你的技能。...API、React 路由器、自定义钩子 The Net Ninja 的完整现代 React 播放列表 一些有用的提示 不要试图一次学习所有内容,理解并接受您是初学者并花费足够的时间来学习这些概念的事实

    5.4K20

    搞懂了,React 中原来要这样测试自定义 Hooks

    本文中,我们将探索如何使用 React Testing Library 测试库来测试自定义钩子。 如何测试 React 组件 开始前,首先让我们回顾一下如何测试一个基本的 React 组件。...我这里提供一个 Counter 组件的例子,该组件显示一个计数和一个按钮,当单击该按钮时,计数会增加。...下面这段代码,你看到的是我将前面计算器的逻辑提取到一个名为 useCounter 的自定义钩子中: // useCounter.tsx import { useState } from "react";...这个函数允许我们渲染一个钩子并访问它的返回值。...总结 当使用 React Testing Library 测试自定义钩子时,我们使用 renderHook() 函数来渲染我们的自定义钩子,并验证它是否返回预期的值。

    43840

    构建去中心化智能合约编程货币

    译文出自:登链翻译计划[1] 译者:Johnathan[2] 校对: Tiny熊[3] [第1部分] 使用Solidity[4] 和 React在以太坊上构建具有社交找回功能的智能合约钱包 前言 我第一次对以太坊感到兴奋那会儿是阅读这...该provider会对发送到我们的本地和主网的交易进行签名。 区块链是一个节点网络,每一节点都拥有当前状态。...然后,重新部署: yarn run deploy 我们正在使用一个自动化脚本,该脚本试图找到我们的合约并进行部署。...你还可以等待此tx()函数以获取生成的哈希,状态等。 当你写入地址公共所有者地址时,它会自动为此变量创建一个“getter”函数,我们可以通过useContractReader()钩子轻松地获取它。...现在它是你的! 你可以根据需要使用不同的浏览器和隐身模式创建尽可能多的帐户。然后用水龙头给他们一些ether。 ☢️ 警告,我们正在从本地链中获取时间戳,但是它不会像主网那样定时出块。

    1.5K30

    深入了解 useMemo 和 useCallback

    下面是一个可能的实现: import React from 'react'; function App() { // 存储用户所选号码的状态。...当时间状态变量发生变化时),useMemo 忽略函数并传递缓存的值。 这通常被称为记忆,这就是为什么这个钩子被称为 useMemo。...示例2:保留引用 在下面的示例中,我创建了一个 Boxes 组件。它展示了一组彩色的盒子,用于某种装饰目的。我还有一个不相关的状态:用户名。...使用这些钩子的最佳方式是响应问题。如果你注意到你的应用程序变得有点迟缓,你可以使用 React Profiler 来查找缓慢的渲染。在某些情况下,可以通过重构应用程序来提高性能。...当我构建这样的自定义可重用钩子时,我希望使它们尽可能高效,因为我不知道将来会在哪里使用它们。在95%的情况下,这可能是多余的,但如果我使用这个钩子30或40次,这很有可能有助于提高应用程序的性能。

    9.1K30

    React 函数组件和类组件的区别

    welcome, {props.name} } export default Welcome 这个函数接收一个 props 对象并返回一个 react 元素 二、什么是类组件 React...如果要在组件中使用 state,可以选择创建一个类组件或者将 state 提升到你的父组件中,然后通过 props 对象传递到子组件。...3、生命周期钩子 函数组件中不能使用生命周期钩子,原因和不能使用 state 一样,所有的生命周期钩子都来自于继承的 React.Component 中。...注意:在 react16.8 版本中添加了 hooks,使得我们可以在函数组件中使用 useState 钩子去管理 state,使用 useEffect 钩子去使用生命周期函数。...我们可以在事件发生的早期,将 this.props 传递给超时完成的处理程序来尝试着解决这个问题。这种解决方式属于闭包的范畴。

    7.5K32

    React服务器组件入门

    值得一提的是,Waku 目前正在快速开发中,只应在非生产项目中使用。 React 服务器组件简介 所以我的看法是:RSC 使 React 开发人员能够在组件级别访问异步服务器端请求和结果数据。...Next.js 路由(App Router) 在此路由中,有一个名为 getData 的函数,它向 GitHub API 发出异步请求并返回响应,然后可以使用 getData 函数提取该响应并将其提供给路由或页面...loader 的函数,它向 GitHub API 发出异步请求并返回响应,然后可以使用 useLoaderData hook 提取该响应并将其提供给页面。...GraphQL(一个普遍的误解)获取数据;相反,你正在查询它。...数据的获取发生在构建时,但是使用 useStaticQuery 钩子,你可以从任何组件、任何级别访问数据,而无需通过道具传递它们。

    13110

    React 18 如何提升应用性能

    在 SSR 中,服务器预先将组件树渲染为 HTML 并将其与 JavaScript 捆绑包一起发送到客户端,然后客户端接管渲染过程并挂载组件,使其成为可交互。...要将一个组件及其导入添加到 JavaScript 捆绑包中,并将其发送到客户端,从而使其具有交互性,可以在文件的顶部使用 use client 捆绑器指令。...❝React 还可以「根据用户交互重新设置组件的优先级」。例如,当用户与一个当前未被渲染的挂起组件进行交互时,React 会暂停正在进行的渲染,并将用户正在交互的组件设为优先级。...一旦准备好,React 将其提交到 DOM,并恢复先前的渲染。这确保了用户交互的优先级,并使用户界面保持响应,并随着用户输入实时更新。...数据获取 除了渲染更新外,React 18 还引入了一种新的 API 来「高效地获取数据并对结果进行记忆」。 ❝React 18 现在有一个 cache 函数,它可以「缓存函数调用的结果」。

    40530

    开发一个在线 Web 代码编辑器,如何?今天来教你!

    本篇文章我希望和大家一起,尝试创建一个在线的 Web 代码编辑器,并在 HTML、CSS 和 JavaScript 的帮助下实时显示结果。我在本文的最后也放置了源代码的下载链接。...使用 useState 钩子,我们将该 state 存储单击该选项卡按钮时当前打开的编辑器选项卡的名称。...可以将其想象为通常在输入字段中用于跟踪更改的 onChange 处理程序。使用它,我们将能够在有新更改的任何时候获取编辑器的值并将其保存到编辑器的状态。...在我们的代码中,我们传递了一个 HTML 模板,获取包含用户在 HTML 编辑器中键入的代码的 html 状态,并将其放置在模板的 body 标记之间。...为了获得更好的可访问性,你可以采取以下措施来改进: 你可以在当前打开的编辑器的按钮上设置一个 active 类,高亮显示该按钮。这样可以让用户清楚地知道他们当前正在使用哪个编辑器,从而提高可访问性。

    12.3K30

    【实战】快来和我一起开发一个在线 Web 代码编辑器

    本篇文章我希望和大家一起,尝试创建一个在线的 Web 代码编辑器,并在 HTML、CSS 和 JavaScript 的帮助下实时显示结果。我在本文的最后也放置了源代码的下载链接。...使用 useState 钩子,我们将该 state 存储单击该选项卡按钮时当前打开的编辑器选项卡的名称。...可以将其想象为通常在输入字段中用于跟踪更改的 onChange 处理程序。 使用它,我们将能够在有新更改的任何时候获取编辑器的值并将其保存到编辑器的状态。...在我们的代码中,我们传递了一个 HTML 模板,获取包含用户在 HTML 编辑器中键入的代码的 html 状态,并将其放置在模板的 body 标记之间。...为了获得更好的可访问性,你可以采取以下措施来改进: 你可以在当前打开的编辑器的按钮上设置一个 active 类,高亮显示该按钮。这样可以让用户清楚地知道他们当前正在使用哪个编辑器,从而提高可访问性。

    81120

    探索 React 状态管理:从简单到复杂的解决方案

    在Counter组件内部,我们使用useState钩子定义了一个名为count的状态变量,并将其初始化为0。由useState提供的setCount函数允许我们更新count的值并触发组件的重新渲染。...每当状态发生变化时,React都会处理组件的重新渲染并相应地更新显示的计数。这个基本例子演示了在React应用程序中使用useState()钩子管理状态的简单性和强大性。...React的createContext函数创建了一个上下文。...在Child组件中,我们使用useSelector钩子从Redux store中获取count状态。我们还使用useDispatch钩子获取对dispatch函数的引用。...我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

    48331

    教你如何在 React 中逃离闭包陷阱 ...

    如果我们不是在 something 函数内创建该值,而是将其作为参数传递并返回内部函数呢: const something = (value) => { const inside = () => {...}; return inside; }; 问题是每次调用都会重新创建内部函数,如果我决定尝试缓存它,会发生什么情况呢?...每次使用 useCallback 时,我们都会创建一个闭包,并缓存传递给它的函数: // that inline function is cached exactly as in the section...如果我尝试对 onClick 回调使用 Ref 而不是 useCallback 钩子,会发生什么情况呢?有些文章会建议通过这样做来 memoize 组件上的 props。...我们在 onClick 中的值从未更新过,你能告诉我为什么吗? 当然,这又是一个过期闭包。当我们创建 onClick 时,首先使用默认状态值(undefined)形成闭包。

    68940

    逆向分析Spotify.app并hook其功能获取数据

    项目 该项目的目标是构建一个Spotify客户端,让它能够学习我的听曲习惯并跳过一些我通常会跳过的歌曲。不得不承认,这种需求来自于我的懒惰。我不想在当我有心情想要听某些音乐时,创建或查找播放列表。...但是为了能够训练一个模型,我首先需要数据来训练它。 数据 我需要完整的听歌历史记录,包括我跳过的那些歌曲。获取历史记录很简单。...在对钩子有了一些基本的知识背景后,下面我们准备尝试在Spotify中插入一个钩子。但首先我们需要弄清楚我们想要hook的是什么。...然后我们可以运行LLDB并将其attach到正在运行的Spotify进程,如下所示: ? 尝试按F9(如果Spotify不是活动窗口,它可能会打开iTunes)。...然后,在这两个钩子中,我首先检查当前的歌曲是否已经过了一半。如果是的话,我什么都不做,假设我只是对这首歌感到厌倦,而不是觉得它不合适。然后在backs (F7),我弹出last skip。

    1.4K30

    2021年50个酷炫的Web和移动项目创意

    由于这些天很多人倾向于使用多个约会应用程序,因此您可能很难跟踪自己计划的日期。使用这种类型的应用程序,您可以跟踪当前正在与之交谈的所有人员以及基本信息,例如姓名,电话号码,相识地点等。...创建一个可以随机生成餐点并选择可配合使用的食材的应用程序可以提高您的烹饪技能。您还可以发现一些不错的食谱,可以与他人分享。...这不仅可以让您跟踪自己的观看记录,还可以将其与前端结合使用,从而拥有自己的个人应用程序并拥有自己的观看习惯。...您可以创建一个应用程序,以便为各种房间创建平面图。然后,您可以添加家具并查看其外观。然后可以与其他人共享此内容,以便您获得反馈。例如,假设该应用程序是2D的,而您正在从上方俯视平面图。...甚至更少,如果您想变得更自发并尝试不同的方法。也是养成新习惯的好方法。

    4.3K21

    07-React Hooks(路由组件懒加载, Context上下文, 组件优化...)

    useState /** * 使用范围: 用于函数式组件, 使函数式组件具备state的能力 * useState的使用方式 * 1: 从react库中引入 useState 函数 * 2: 使用函数创建值引用和方法引用...(count+1) * 4.2: 入参为函数修改: setCount(count => count + 1) 函数会有一个入参为当前值对象, 然后需要返回一个新的值对象 */ import React...三个生命周期钩子函数的集合 * useEffect的使用方式 * 1: 从react库中引入 useEffect 函数 * 2: 使用函数完成生命周期钩子函数 * -:具体使用看下面注释 *...useRef函数 * 2: 使用函数创建属性 const myRef = useRef() * 3: 绑定到组件 * 4: 获取值...渲染时会被丢弃 * 使用方式: * 1: 从react库中引入 * 2: 一般包裹在最外层 * 3: 只接受唯一一个属性 key * 4: 如不过想写, 可以使用空标签替换 */

    1.3K30

    React 中请求远程数据的四种方法

    React 是一个专注的组件库。因此,它对如何请求远程数据没有什么建议。如果要通过 HTTP 请求数据并将其发送到 Web API,可以考虑下面四种方法。...另外,如果你使用的是 GraphQ L,还可以考虑使用 Apollo 之类的其他不错的选择。这篇文章假设你正在调用传统的 REST API。 方式1:内联 这是最简单,最直接的选择。...方式2:文件夹集中管理 如果我们在一个文件夹中处理所有 HTTP 调用会怎么样? 使用这种方法,我们创建了一个名为 services 的文件夹,并且把进行 HTTP 调用的函数都放进去。...方式3:自定义Hook 借助 React Hooks 的魔力,我们终于可以集中处理重复的逻辑。那么如何创建一个自定义 useFetch 钩子来简化我们的 HTTP 调用呢?...但是,您应该只需要方式4: 方式4:react-query/swr 使用 react-query或swr,可以为我们处理缓存、重试、重复查询等等。我不必维护自己的自定义Hook了。

    4.1K10

    React 中请求远程数据的四种方法

    React 是一个专注的组件库。因此,它对如何请求远程数据没有什么建议。如果要通过 HTTP 请求数据并将其发送到 Web API,可以考虑下面四种方法。...另外,如果你使用的是 GraphQ L,还可以考虑使用 Apollo 之类的其他不错的选择。这篇文章假设你正在调用传统的 REST API。 方式1:内联 这是最简单,最直接的选择。...方式2:文件夹集中管理 如果我们在一个文件夹中处理所有 HTTP 调用会怎么样? 使用这种方法,我们创建了一个名为 services 的文件夹,并且把进行 HTTP 调用的函数都放进去。...方式3:自定义Hook 借助 React Hooks 的魔力,我们终于可以集中处理重复的逻辑。那么如何创建一个自定义 useFetch 钩子来简化我们的 HTTP 调用呢?...但是,您应该只需要方式4: 方式4:react-query/swr 使用 react-query或swr,可以为我们处理缓存、重试、重复查询等等。我不必维护自己的自定义Hook了。

    2.3K30

    何时在 React 中使用 useEffect 和 useLayoutEffect

    React Hooks,在 React 16.8 中引入,彻底改变了我们在 React 中编写组件的方式。它们允许我们在不编写类的情况下使用状态和其他 React 功能。...其中的两个钩子,useEffect 和 useLayoutEffect,用于在函数组件中执行副作用。但是应该在什么情况下使用它们各自呢?让我们探索一下这两个钩子并找出答案。什么是 useEffect?...useEffect 钩子用于在函数组件中执行副作用。副作用可以是影响当前正在执行的函数范围之外的任何事物。例如数据获取、设置订阅、手动更改 DOM 等。...总之,理解 useEffect 和 useLayoutEffect 之间的差异对于确保 React 应用程序的性能至关重要。在正确的时间使用正确的钩子,你就能创建出流畅高效的 React 应用程序。...我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

    28100

    React 查询:无限滚动

    在其他情况下,我可能会创建一个 types.ts 文件来存放我们的类型,但这次我们只会在这个文件中使用。因此,我将在我们的组件中创建类型。此外,我将添加 MAX_POST_PAGE 常量。...我会将其作为对象接收并使用解构。...使用 useRef 钩子创建一个观察者引用,并将 IntersectionObserver 类型作为泛型传递,如下所示:// src/Todo/index.tsxconst observer = useRef...但你可能会想 为什么我要解释所有这些概念,我们将需要使用观察者来查看用户是否在页面底部,以便传递下一个页面参数时获取新数据。所以,是的!...正如我之前所说,无限滚动是一种不同类型的分页 让我们使用 React Query 的 useInfiniteQuery 钩子。

    16300
    领券