首页
学习
活动
专区
圈层
工具
发布

彻底搞懂 React Context API:从共享登录状态到权限控制

本期我们将聚焦 React 应用中最常见但也最容易误用的机制:Context API。 你可能早就知道它能“解决 props drilling”,但它到底该怎么用?用在哪儿最合理?...如果你还在层层 props 传递,或者每个组件都重新调用 API 获取用户数据…… ❌ 你的状态架构可能存在问题! 二、什么才是“值得被共享”的状态?...我们用一句话定义「共享状态」: 跨越多个组件层级,且多个组件都要“读取或依赖”的状态 在本项目中,有三类典型共享状态: 状态类型 示例字段 使用位置 用户信息 user.name, user.role...Header / Sidebar / ProtectedRoute 权限数组 permissions: string[] Sidebar 菜单 / 页面权限判断 全局状态 loading, dispatch...) 小结复盘 Context API 是「解决跨组件状态共享」的工具,不是通用状态管理库 推荐用于 “读多写少” 的全局数据:用户、权限、UI偏好等 搭配 useReducer + TypeScript

31800

轻松学会 React 钩子:以 useEffect() 为例

一、React 的两套 API 以前,React API 只有一套,现在有两套:类(class)API 和基于函数的钩子(hooks) API。 ? 任何一个组件,可以用类来写,也可以用钩子来写。...初学者自然会问:"我应该使用哪一套 API?" 官方推荐使用钩子(函数),而不是类。因为钩子更简洁,代码量少,用起来比较"轻",而类比较"重"。而且,钩子是函数,更符合 React 函数式的本质。...如果你有多个操作,每个操作应该写成一个单独的函数。而且,数据的状态应该与操作方法分离。根据这种理念,React 的函数组件只应该做一件事情:返回组件的 HTML 代码,而没有其他的功能。 ?...一句话,钩子(hook)就是 React 函数组件的副效应解决方案,用来为函数组件引入副效应。 函数组件的主体只应该用来返回组件的 HTML 代码,所有的其他操作(副效应)都必须通过钩子引入。...找不到对应的钩子时,就可以用它。其实,从名字也可以看出来,它跟副效应(side effect)直接相关。 ?

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

    探索React Hooks:原来它们是这样诞生的!

    无状态函数组件 在同一时期,React 团队宣布了一种使用函数而不是类来创建组件的新方法。当时的主要想法是拥有一个仅接受属性并可以返回 JSX 的组件。...没有状态或使用类似于类生命周期方法的 React API 的能力。 我们称之为无状态函数组件,因为它们也不能有状态。 不久之后,React 团队告诉我们不要这样称呼它们。...我们应该称之为函数组件,因为...他们有计划 2018 Hooks 从本质上讲,Hooks 只是我们可以从函数组件中调用的函数。...我们可以使用内置的钩子并编写自己的: 内置钩子:这些API(如 useState() )使功能组件能够“挂钩”到React的所有功能。 自定义钩子:这些只是我们编写的实现内置钩子的函数。...自定义钩子的一般概念是为任何想要使用它的组件创建可重用的逻辑。 React 有 useState() ,因此函数组件可以拥有与类状态类似的自己的本地状态。

    2.5K20

    React Hooks

    一、React 的两套 API 以前,React API 只有一套,现在有两套:类(class)API 和基于函数的钩子(hooks) API。 任何一个组件,可以用类来写,也可以用函数来写。...如果有多个操作,每个操作应该写成一个单独的函数。而且,数据的状态应该与操作方法分离。 根据这种理念,React 的函数组件只应该做一件事情:返回组件的 HTML 代码,而没有其他的功能。...纯函数内部只有通过间接的手段(即通过其他函数调用),才能包含副作用。 二、React Hooks Hook(钩子)是 React 函数组件的副作用解决方案,用来为函数组件引入副作用。...下面是 React 默认提供的四个最常用的钩子: useState() useContext() useReducer() useEffect() 1、useState():状态钩子 ---- useState...) 下面是从远程服务器获取数据的例子: import React, { useState, useEffect } from 'react' import axios from 'axios' function

    2.9K10

    setup vs 5 react hooks,助你避开沟中陷阱

    setup vs 5 react hooks,助你避开"沟"中陷阱 [image.png] 序言 本文主题围绕concent的setup和react的五把钩子来展开,既然提到了setup就离不开composition...vue3各种相关的介绍文里已经了解到不少了,它们可以同时存在,并非强制你只能使用哪一种,但组合api两大优势的确让开发者们更倾向于使用它来替代可选api。...以函数为基础单位来打包可复用逻辑,并注入到任意组件,让视图和业务解耦更优雅 让相同功能的业务更加紧密的放置到一起,不被割裂开,提高开发与维护体验 以上两点在react里均被hook优雅的解决了,那么相比...computed用于定义计算函数,从参数列表里解构时就确定了计算的输入依赖,相比useMemo,更直接与优雅。...,可以从this.ctx上直接获取concent为其生成的渲染上下文,同时呢this.state和this.ctx.state是等效的,this.setState和this.ctx.setState也是等效的

    3.5K101

    前端面试之React

    关于React的两套API(类(class)API 和基于函数的钩子(hooks) API)。官方推荐使用钩子(函数),而不是类。因为钩子更简洁,代码量少,用起来比较"轻",而类比较"重"。...难以理解的 class,理解 JavaScript 中 this 的工作方式。 区别: 函数组件的性能比类组件的性能要高,因为类组件使用的时候要实例化,而函数组件直接执行函数取返回结果即可。...3.因为调用方式不同,在函数组件使用中会出现问题 在操作中改变状态值,类组件可以获取最新的状态值,而函数组件则会按照顺序返回状态值 React Hooks(钩子的作用) Hook 是 React 16.8...React Hooks的几个常用钩子: useState() //状态钩子 useContext() //共享状态钩子 useReducer() //action 钩子 useEffect() //副作用钩子...从Stack Reconciler到Fiber Reconciler,源码层面其实就是干了一件递归改循环的事情 传送门 ☞# 深入了解 Fiber Portals Portals 提供了一种一流的方式来将子组件渲染到存在于父组件的

    3.4K20

    react hooks api

    react hooks api ? hooks API是 React 16.8的"新增"功能(16.8更新于2年前)。...React Hooks 的设计目的,就是加强版函数组件,完全不使用"类",就能写出一个全功能的组件。 ---- 3、Hook 的含义 Hook 这个单词的意思是"钩子"。...useState()这个函数接受状态的初始值,作为参数,上例的初始值为按钮的文字。该函数返回一个数组,数组的第一个成员是一个变量(上例是buttonText),指向状态的当前值。... 根据react的哲学,所有的状态应该从顶层传入——使用hooks也不例外,第一步就是使用 React...数组的第一个成员是状态的当前值,第二个成员是发送 action 的dispatch函数。 凡是涉及到状态管理,都使用计数器为例子。

    3.4K10

    用动画和实战打开 React Hooks(一):useState 和 useEffect

    在 Hooks 出现之前,类组件和函数组件的分工一般是这样的: 类组件提供了完整的状态管理和生命周期控制,通常用来承接复杂的业务逻辑,被称为“聪明组件” 函数组件则是纯粹的从数据到视图的映射,对状态毫无感知...光看代码可能有点抽象,请看下面的动画: 与之前的纯函数式组件相比,我们引入了 useState 这个钩子,瞬间就打破了之前 UI = render(data) 的安静画面——函数组件居然可以从组件之外把状态和修改状态的函数...也就是说,每个函数中的 state 变量只是一个简单的常量,每次渲染时从钩子中获取到的常量,并没有附着数据绑定之类的神奇魔法。 这也就是老生常谈的 Capture Value 特性。...然后通过 useEffect 钩子获取 API 数据,其中有以下需要注意的点: 我们通过定义了一个 fetchGlobalStats 异步函数并进行调用从而获取数据,而不是直接把这个 async 函数作为...,作为一个整体它们完全不受外界的影响 鼓励细粒度和扁平化的状态定义和控制,对于代码行为的可预测性和可测试性大有帮助 除了 useState (和其他钩子),函数组件依然是实现渲染逻辑的“纯”组件,对状态的管理被

    3.2K20

    useEffect() 与 useState()、props 和回调、useEffect 的依赖类型介绍

    useEffect() 与 useState() useState是一个 React 钩子函数,用于管理和更新功能组件中的状态。...**useState 用于管理组件特定的状态,而 useEffect 则用于处理与组件状态无直接关系但需要根据状态或道具变化触发的副作用或操作。这两个函数是构建 React 项目的基本组件。...props和回调 Props(属性的缩写)用于将数据从父组件传递到子组件。Props是只读的;子组件不能直接修改其 props。它们用于组件之间的通信和数据传输。...例如,在我们的 PlayerCard.js 中,“player”是一个 prop 的示例,它是从 PayerList.js 传递下来的: import React from 'react'; const...当任何 props 或状态变量发生变化时,它不会重新运行。这通常是为了在组件安装时从 API 获取数据。

    1.9K30

    useEffect 的阴暗面

    React 的 useEffect 钩子可以说是函数组件中执行副作用的瑞士军刀,既能获取数据、设置订阅,还能和浏览器 DOM 打交道。...理解 useEffect 什么是 useEffect useEffect 是 React 内置的一个钩子函数,专门用来处理函数组件中的副作用。什么是副作用?...常见使用场景 在实际开发中,useEffect 最常见的几个用途包括: • 数据获取:组件挂载时从 API 拉取数据,或者当某个参数变化时重新拉取数据。...这就像离开房间时要关灯、关空调,不能浪费资源 下面是一个典型的数据获取示例: function MyComponent() { // 使用 useState 创建状态,存储从 API 获取的数据 const...:全局状态管理 当需要在多个组件之间共享状态或副作用逻辑时,Context API 比通过 props 层层传递更优雅。

    17310

    认识组合api,换个姿势撸更清爽的react

    api) 两种组织代码的方式,相信大家在vue3各种相关的介绍文里已经了解到不少了,它们可以同时存在,并非强制你只能使用哪一种,但组合api两大优势的确让开发者们更倾向于使用它来替代可选api。...以函数为基础单位来打包可复用逻辑,并注入到任意组件,让视图和业务解耦更优雅- 让相同功能的业务更加紧密的放置到一起,不被割裂开,提高开发与维护体验 以上两点在react里均被hook优雅的解决了,那么相比...5把钩子 useState 过完需求,我们需要用到第一把钩子useState来做组件首次渲染的状态初始化 function Counter() { const [num, setNum] = useState...computed用于定义计算函数,从参数列表里解构时就确定了计算的输入依赖,相比useMemo,更直接与优雅。...,可以从this.ctx上直接获取concent为其生成的渲染上下文,同时呢this.state和this.ctx.state是等效的,this.setState和this.ctx.setState也是等效的

    1.7K4847

    React黑魔法大揭秘:程序员们都在暗中使用,但没人敢公开承认的React禁忌操作

    ⚠️ 免责声明:以下内容可能会颠覆你的React世界观,请谨慎食用 第一重罪:setTimeout破解状态地狱 罪名:违反React状态更新原理 实用指数:⭐⭐⭐⭐⭐ 还在为React的状态批处理机制抓狂吗...第二重罪:故意无视依赖数组 罪名:公然违抗ESLint警告 实用指数:⭐⭐⭐⭐ 每个React开发者都被洗脑过:"useEffect的依赖数组必须包含所有使用的变量!"...它让你在保持钩子调用顺序稳定的同时,实现了条件逻辑。这是React架构设计的精髓所在。...API 复杂的状态同步逻辑 与第三方库的集成 为什么ref是救星?...罪名:过度工程化简单状态 实用指数:⭐⭐⭐⭐ 当你的useState逻辑开始变得混乱时,不要犹豫,直接上useReducer。

    23010

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

    ❞ 如果我们从函数组件中移除有状态和副作用逻辑,我们就得到了一个无状态组件。此外,有状态和副作用逻辑可以在应用程序的其他地方进行重复使用。因此,尽量将它们与组件隔离开来是有意义的。...React Hooks 和 有状态逻辑 通过React Hooks,我们可以将状态逻辑和副作用从函数组件中隔离出来。...但是,有了React Hooks,开发人员现在可以在函数组件中直接利用状态和其他React功能。 Hooks提供了一种轻松地在多个组件之间重复使用有状态逻辑的方式,提高了代码的可重用性并减少了复杂性。...使用场景 无论我们是从API获取数据、执行计算还是处理表单提交,这个自定义钩子都简化了在React组件中「管理异步操作」。...另一个优点是存储数据与组件状态之间的自动同步。每当存储的数据发生更改时,该钩子会相应地更新组件的状态。同样,当组件的状态发生更改时,该钩子会自动将新值持久化到存储中。

    3.4K20

    Day3:Github项目每日优选之react-use

    React hooks我相信很多同学已经门清了,这个库实现了基本上我们常见的所有自定义Hooks,需要哪个直接查看源代码复制到你的项目中,二次在改一改,你的同事夸你666呢 Github是个巨大的仓库...useSpeech — 从文本字符串合成语音。 useVibrate — 使用振动 API 提供物理反馈。Vibration API....useTween — 重新渲染组件,同时对从 0 到 1 的数字进行补间。 useUpdate —返回一个回调,它在调用时重新渲染组件。...usePermission — 查询浏览器 API 的权限状态。 5 Lifecycles useEffectOnce — 修改后的 useEffect 钩子,只运行一次。...useList and useUpsert — 跟踪数组的状态。 useMap — — 跟踪对象的状态。 useSet — 跟踪 Set 的状态。 useQueue —实现简单的队列。

    2.3K30

    React常见面试题

    react hook是v16.8的新特性; 传统的纯函数组件, react hooks设计目的,加强版的函数组件,完全不使用‘类’,就能写出一个全功能的组件,不能包含状态,也不支持生命周期), hook...hooks(本质是一类特殊的函数,可以为函数式注入一些特殊的功能)的主要api: 基础Hook: useState : 状态钩子,为函数组件提供内部状态 useEffect :副作用钩子,提供了类似于componentDidMount...等生命周期钩子的功能 useContext :共享钩子,在组件之间共享状态,可以解决react逐层通过props传递数据; 额外的Hook: useReducer: action钩子,提供了状态管理,其基本原理是通过用户在页面上发起的...共享状态钩子,在组件之间共享状态,可以解决react 逐层通过props传递数据的问题 使用流程(使用流程和react-redux差不多): 创建store:通过 createContext Api 包裹整个组件...停止恢复的时机取决于当前的一帧(16ms)内,还有没有足够的时间允许计算 fiber是react16中新发布的特性; 解决的问题: react在渲染过程时,从setState开始到渲染完成,中间过程是同步

    5.4K20

    年前端react面试打怪升级之路

    当不需要使用生命周期钩子时,应该首先使用无状态函数组件组件内部不维护 state ,只根据外部组件传入的 props 进行渲染的组件,当 props 改变时,组件重新渲染。...类似的业务需求也有很多,如一个可以横向滑动的列表,当前高亮的 Tab 显然隶属于列表自身的时,根据传入的某个值,直接定位到某个 Tab。...这就意味着从原则上来讲,React 的数据应该总是紧紧地和渲染绑定在一起的,而类组件做不到这一点。函数组件就真正地将数据和渲染绑定到了一起。...React-Hooks 是一套能够使函数组件更强大、更灵活的“钩子”。函数组件比起类组件少了很多东西,比如生命周期、对 state 的管理等。...component)之间有何不同类组件不仅允许你使用更多额外的功能,如组件自身的状态和生命周期钩子,也能使组件直接访问 store 并维持状态当组件仅是接收 props,并将组件自身渲染到页面时,该组件就是一个

    3.1K10

    50天用react.js重写50个web项目,我学到了什么?

    更详细的使用方式参考文档 useState API。 2.与类组件类似的钩子函数,或者也可以理解为是函数组件的生命周期useEffect。...从语义上来将constructor是一个构造函数,用于初始化状态,然后初始化完成之后,我们就会渲染组件,然后才是准备挂载组件。 额外的,我们扩展一下,根据文档说明,我们可以知道详细的生命周期。...2.React.createRef API 有时候,我们恰恰需要操作一些原生DOM元素的API,例如这个示例的输入框的关注焦点事件。...由于不能直接在该钩子函数中更改状态(react.js会给出一个警告)。所以我们需要让接口请求变成异步。 11....这里踩了一个坑,如果使用new Array().fill()来初始化状态,会导致意想不到的渲染效果。所以这里直接初始化了所有的数组项。 详见源码 。

    1.3K20

    Zustand:让React状态管理更简单、更高效

    Zustand的优势:轻量、简单、灵活 在选择React状态管理库时,我们常常会被各种库的特性和API所困惑。...()方法使得从状态存储中访问数据变得非常简单。...相较于Redux,Zustand提供了一个更为简洁的API,无需引入额外的概念。它允许你直接使用setState来更新状态,无需编写冗长的actions和reducers。...如果在组件渲染后主题发生了变化,组件并不会自动更新以反映新的主题。这是因为Zustand底层使用了React的useState钩子,而React的状态更新是异步的。...结束 Zustand作为React的一款强大且轻量级的状态管理库,通过提供简单的API和与TypeScript的无缝集成,为开发者们带来了优雅的状态管理体验。

    3.3K11
    领券