React18(知识点总结)

基本用法

使用函数组件

基本用法
在这里插入图片描述
遍历数组在这里插入图片描述
绑定事件
在这里插入图片描述
多用于处理异步加载数据未返回时显示loading

生命周期

React中生命周期存在于类组件中,函数组件是没有生命周期的;但是函数组件可以通过hooks来模拟生命周期的回调

类组件-生命周期

三大阶段:挂载 / 更新 / 销毁
5个常用钩子:componentDidMount componentDidUpdate componentWillUnmount + render shouldComponentUpdate
在这里插入图片描述

  • render:固定执行,决定组件模板的渲染
  • componentDidMount:操作DOM、绑定事件、发起网络请求
  • shouldComponentUpdate:组件接收到新的 props 或者 state 会触发,默认返回true,允许更新;自定义改成false,则不更新,页面空白(多用于性能优化)
  • componentDidUpdate:组件更新完成
  • componentWillUnmount:解绑事件、清除定时器等
    在这里插入图片描述
    在这里插入图片描述

函数组件 -(使用 Hooks 来模拟生命周期)

如何模拟:

  • render(默认执行)
  • componentDidMount + componentDidUpdate + componentWillUnmount = useEffect()
useEffect(() => {
  // 模拟componentDidMount:操作DOM、绑定事件、发起网络请求
  .......
  return () => {
  // 模拟 componentWillUnmount:解绑事件、清除定时器等
  };
}, [
// 模拟componentDidUpdate
// 第二个参数设置为空数组[],代表不需要监听,就能达到只在挂载mount时执行一次;
// 这就是“消除副作用”
// 如果不是空数组,而是[demo],则监听demo的更新update
]);

useEffect()

为什么在<React.strcitMode />组件里包裹的组件会执行两次useEffect()里面的函数

为了倒逼开发者尽可能使用纯函数(多次执行同一函数,都是一样的结果);减少错误的产生(例如在组件卸载前记得还原变量到初始值、清理资源、取消订阅等重要操作,减少可能的内存泄漏和其他问题)

原理:官网提到,它会先模拟组件加载又卸载,然后再进行第二次加载;所以看起来就是执行了2次

官网原话:没必要不让它执行2次,因为开发者更应该学会让组件正确的加载卸载

五大钩子

在这里插入图片描述

HOC HOC

  • 高阶函数(Higher Order Function,HOF)

高度抽象、模块化的function,如js数组的 map、filter、reduce 或者 React / Vue的生命周期钩子函数

  • 高阶组件(Higher Order Component,HOC)

高度复用的component

// 身份验证的HOC
function withAuth(Component) {
  return function(props) {
    if (isLoggedIn()) {
      return <Component {...props} />;
    } else {
      return <LoginScreen />;
    }
  };
}

const AuthenticatedComponent = withAuth(MyComponent);

最常用的3个hook

useState() : 定义组件的状态,如const [demo,setDemo] = useState(null);
useRef() : 响应式数据(和Vue3的ref()差不多)
在这里插入图片描述

useEffect() :只在页面初始化执行一次函数(副作用函数)在这里插入图片描述
在这里插入图片描述

useState()
  1. 操作字符串
    在这里插入图片描述
  2. 操作对象
    在这里插入图片描述
  3. 操作数组在这里插入图片描述
    props的使用在这里插入图片描述
    父向子
  4. 简单通信在这里插入图片描述
  5. 祖孙通信在这里插入图片描述
  6. (预定义在children里面)在这里插入图片描述
  7. 设定默认值在这里插入图片描述
    子向父在这里插入图片描述
useReducer(升级版的useState)在这里插入图片描述
多组件传值:createContext() useContext() 共享上下文在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

useMemo

类似于vue的watch+computed:监听变化+复杂计算+缓存数据

useCallback

类似于专门缓存【函数】版的useMemo

useEffect和useLayoutEffect的区别

【执行时机的不同】
useEffect属于异步,在浏览器渲染完成后执行
useLayoutEffect属于同步,在浏览器渲染前执行,可以避免页面的闪烁

React.strictMode

在开发模式下检查、暴露潜在问题,不会影响到生产模式

<Suspense />异步组件

可在等待数据返回时显示Loading…
在这里插入图片描述
在这里插入图片描述
一般搭配React.lazy()异步加载组件

import React, { Suspense } from 'react';

const LazyAaa = React.lazy(() => import('./Aaa'));

export default function App() {
  return <div>
    <Suspense fallback={'loading...'}>
      <LazyAaa></LazyAaa>
    </Suspense>
  </div>
}

<ErrorBoundary />错误边界

在这里插入图片描述

Hook的限制

  1. 自定义hook时尽量以use开头:约定俗成的,方便辨别

  2. 顶层作用域:指的是函数组件的直接内部,也就是在函数组件的花括号 {} 内部声明的区域。这意味着钩子应该在函数组件的开始部分被调用,而不是在内部嵌套的区域或者条件语句中。

    function MyComponent() {
      // 顶层作用域
      const [count, setCount] = useState(0);
      useEffect(() => {
        // 顶层作用域
        // ...
      }, [count]);
    
      // 顶层作用域
      if (count > 0) {
        // 不是顶层作用域
        // 这里不能调用钩子
      }
    
      // 顶层作用域
      return <div>{count}</div>;
    }
    
  3. 循环、嵌套函数、条件语句中不能调用:这是因为 React 需要在渲染时能够正确地追踪和管理组件的状态变化,如果钩子被调用的位置在循环、嵌套函数或条件语句中,React 将无法准确地确定钩子何时被调用,从而可能导致不可预测的行为或错误。

    function MyComponent() {
      // 顶层作用域
      for (let i = 0; i < 5; i++) {
        // 不是顶层作用域
        // 这里不能调用钩子
      }
    
      // 顶层作用域
      function helperFunction() {
        // 不是顶层作用域
        // 这里不能调用钩子
      }
    
      // 顶层作用域
      if (condition) {
        // 不是顶层作用域
        // 这里不能调用钩子
      }
    
      // 顶层作用域
      return <div>{/* ... */}</div>;
    }
    

通过遵守这个限制,可以确保 React 能够正确地追踪组件的状态变化,从而避免出现潜在的问题和错误。

React 18 更新

在这里插入图片描述

在 React 中,在父组件A 如何获取子组件 B (类组件和函数组件) 中的数据

  • 类组件
  1. 使用 ref
  2. 使用 props
  • 函数组件
  1. 使用 useRef
  2. 通过 props
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是React中常用的一些知识点: 1. 组件:React将用户界面拆分为可重用的组件,组件是构建React应用的基本单元。组件可以是函数组件或者类组件。 2. JSX:JSX是一种类似于HTML的语法扩展,可以在JavaScript代码中编写类似HTML的结构。它允许我们以声明式方式描述UI组件的结构。 3. Props:Props是组件的属性,用于传递数据和配置参数给组件。通过props,我们可以向子组件传递数据并进行组件之间的通信。 4. State:State是用于存储和管理组件内部的数据的对象。当state发生变化时,React会自动重新渲染组件,并更新相应的视图。 5. 生命周期:React组件具有生命周期方法,这些方法在组件的不同阶段被调用,例如组件被创建、更新、卸载等。 6. Hooks:Hooks是React 16.8版本引入的特性,它允许我们在无需编写类组件的情况下使用状态和其他React特性。常用的Hooks包括useState、useEffect、useContext等。 7. 条件渲染:React允许我们根据条件来渲染不同的内容或组件。常用的条件渲染方式包括if语句、三元表达式和逻辑与(&&)运算符等。 8. 列表渲染:React提供了map方法来遍历数组或者列表,动态生成列表项。通过列表渲染,我们可以根据数据动态生成多个相似的组件。 9. 表单处理:React提供了一些事件和处理函数来方便地处理表单的输入和提交。通过onChange事件,我们可以监听表单元素的值变化,并将其保存到组件的state中。 10. 组件通信:React中的组件通信可以通过props、状态提升、上下文(Context)和全局状态管理工具(如Redux)等方式来实现。 这些是React中常用的知识点,当然还有更多深入的内容和特性可以学习和掌握。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘泽宇Developer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值