day02-React基础-下

React表单控制

受控绑定

概念:使用React组件的状态(useState)控制表单的状态

image.png

非受控绑定

概念:通过获取DOM的方式获取表单的输入数据

案例-B站评论案例

image.png
  1. 手机输入框评论内容,并发布评论

  2. id处理和时间处理(uuid 和 day.js)

React组件通信

概念:组件通信就是组件之间的数据传递, 根据组件嵌套关系的不同,有不同的通信手段和方法

image.png
  1. A-B 父子通信

  2. B-C 兄弟通信

  3. A-E 跨层通信

父子通信-父传子

image.png

基础实现

**实现步骤 **

  1. 父组件传递数据 - 在子组件标签上绑定属性

  2. 子组件接收数据 - 子组件通过props参数接收数据

props说明

props可以传递任意的合法数据,比如数字、字符串、布尔值、数组、对象、函数、JSX image.png props是只读对象 子组件只能读取props中的数据,不能直接进行修改, 父组件的数据只能由父组件修改

特殊的prop-chilren

场景:当我们把内容嵌套在组件的标签内部时,组件会自动在名为children的prop属性中接收该内容

image.png

父子通信-子传父

image.png

核心思路:在子组件中调用父组件中的函数并传递参数

兄弟组件通信

image.png

实现思路: 借助 状态提升 机制,通过共同的父组件进行兄弟之间的数据传递

  1. A组件先通过子传父的方式把数据传递给父组件App

  2. App拿到数据之后通过父传子的方式再传递给B组件

跨层组件通信

image.png 实现步骤:

  1. 使用 createContext方法创建一个上下文对象Ctx

  2. 在顶层组件(App)中通过 Ctx.Provider 组件提供数据

  3. 在底层组件(B)中通过 useContext 钩子函数获取消费数据

React副作用管理-useEffect

概念理解

useEffect是一个React Hook函数,用于在React组件中创建不是由事件引起而是由渲染本身引起的操作(副作用), 比 如发送AJAX请求,更改DOM等等 image.png :::warning 说明:上面的组件中没有发生任何的用户事件,组件渲染完毕之后就需要和服务器要数据,整个过程属于“只由渲染引起的操作” :::

基础使用

需求:在组件渲染完毕之后,立刻从服务端获取平道列表数据并显示到页面中

image.png 说明:

  1. 参数1是一个函数,可以把它叫做副作用函数,在函数内部可以放置要执行的操作

  2. 参数2是一个数组(可选参),在数组里放置依赖项,不同依赖项会影响第一个参数函数的执行,当是一个空数组的时候,副作用函数只会在组件渲染完毕之后执行一次 :::warning 接口地址:http://geek.itheima.net/v1_0/channels :::

useEffect依赖说明

useEffect副作用函数的执行时机存在多种情况,根据传入依赖项的不同,会有不同的执行表现

依赖项

副作用功函数的执行时机

没有依赖项

组件初始渲染 + 组件更新时执行

空数组依赖

只在初始渲染时执行一次

添加特定依赖项

组件初始渲染 + 依赖项变化时执行

清除副作用

概念:在useEffect中编写的由渲染本身引起的对接组件外部的操作,社区也经常把它叫做副作用操作,比如在useEffect中开启了一个定时器,我们想在组件卸载时把这个定时器再清理掉,这个过程就是清理副作用

image.png :::warning 说明:清除副作用的函数最常见的执行时机是在组件卸载时自动执行 :::

自定义Hook实现

概念:自定义Hook是以 use打头的函数,通过自定义Hook函数可以用来实现逻辑的封装和复用

image.png

React Hooks使用规则

  1. 只能在组件中或者其他自定义Hook函数中调用

  2. 只能在组件的顶层调用,不能嵌套在if、for、其它的函数中

image.png

案例-优化B站评论案例

image.png
  1. 使用请求接口的方式获取评论列表并渲染

  2. 使用自定义Hook函数封装数据请求的逻辑

  3. 把评论中的每一项抽象成一个独立的组件实现渲染

Last updated

Was this helpful?