type
status
date
slug
summary
tags
category
icon
password
notion image

事件绑定

语法: on + 事件名称 = { 事件处理程序 }, 整体上遵循驼峰命名法

调用函数

传入点击事件

如果要传递点击事件e,直接在参数上传入e

传入自定义参数

如果要传入自定义参数,事件绑定的位置需要改成箭头函数的写法

传入自定义参数和点击事件

既要自定义参数,又要点击事件e

React组件

在React中,一个组件就是首字母大写的函数,内部存放组件的逻辑和UI,渲染组件只需要当成标签书写即可

useState使用

概念及基础使用

概念: useState是一个 React Hook(函数),它允许我们向组件添加一个状态变量,从而控制影响组件的渲染结果
本质: 和普通JS变量不同,状态变量一旦发生变化,组件的视图UI也会跟着发生变化(数据驱动视图)
用法: const [count, setCount] = useState(0)
  1. useState 是一个函数,返回的是一个数组
  1. 数组中第一个参数是状态变量,第二个参数是set函数用来修改状态变量
  1. useState 的参数将作为 count 的初始值

修改值

状态不可变: 在React中,状态被认为是只读的,我们应该始终替换它而不是修改它,直接修改状态不能引发试图更新

修改对象状态

规则: 对于对象类型的状态变量,应该始终传给set方法一个全新的对象来进行修改
setForm 中,使用 ...form 将form对象拆解出来,后面跟上name,如果原对象中有name字段则会替换,如果没有则新添一字段

组件样式控制

两种方法:一种是行内样式,一种是class类名控制

行内样式

style属性名都使用驼峰命名,font-size -> fontSize
或者将样式抽离成对象,然后使用JSX写法写入

class类名控制

React规定,使用类名是属性名为 className (和vue不同,vue中是 class

classnames优化类名控制

classnames是一个简单的JS库,可以非常方便的通过条件动态控制class类名的显示
安装: npm install classnames
nav-item 是静态类名,active 是根据条件动态变化,现在的问题是字符串的拼接方式不够直观,而且如果较多内容则容易出错
使用classnames库,可以将静态和动态分开书写,前面写静态类名,后面每一个对象都表示动态类名及生效的条件,更加直观可维护
动态类名 key表示要控制的类名,value表示条件,true的时候类名显示

表单受控绑定

概念: 使用React组件的状态(useState)控制表单的状态
  1. 准备一个React状态值
    1. 通过value属性绑定状态,通过 onChange 属性绑定状态同步的函数

      在React中获取DOM元素

      使用 useRef 函数获取DOM对象
      1. useRef 生成ref对象,绑定到DOM标签身上
      1. DOM可用时,ref.current 获取DOM对象

      组件通信

      概念: 组件通信就是组件之间的数据传递,根据组件嵌套关系的不同,有不同的通信方法。父子通信、兄弟通信、跨层通信

      父子通信

      父传子

      1. 父组件传递数据——在子组件标签绑定属性
      1. 子组件接收数据——子组件通过props参数接收数据
      props 可以传递任意的数据:数字、字符串、布尔值、数组、对象、函数、JSX
      props 是只读对象,子组件只能读取props中的数据,不能直接进行修改,父组件的数据只能由父组件修改
      特殊的prop children: 当我们把内容嵌套在子组件标签中时,父组件会自动在名为children的prop属性中接受该内容
      则props对象会存在children属性,值为 <span/>

      子传夫

      核心思路: 在子组件中调用父组件的函数并传递参数
      1. 在父组件中定义方法,传递给子组件
      1. 子组件接受方法,然后调用方法,将子组件的值作为实参传递出去给父组件
      1. 如果父组件中要响应更新视图,则需要使用 useState

      兄弟通信

      使用状态提示

      实现思路: 借助”状态提升“机制,通过父组件进行兄弟组件之间的数据传递
      1. A组件先通过子传父的方法把数据传给父组件App
      1. App拿到数据后通过父传子的方式再传递给B组件

      跨层通信

      使用Context机制

      1. 使用 creatContext 方法创建一个上下文对象 Ctx
      1. 在顶层组件(App)中通过 Ctx.Provider 组件提供数据
      1. 在底层组件(B)中通过 useContext 钩子函数获取消费数据

      useEffect使用

      概念及基础使用

      概念:useEffect是一个React Hook函数,用于在React组件中创建不是由事件引起而是由渲染本身引起的操作,比如发送AJAX请求,更改DOM等
      需求:在组件渲染完毕后,立即从服务端获取频道列表数据并显示到页面中
      语法:useEffect(() => { }, [])
      参数1是一个函数,可以叫做副作用函数,在函数内部可以放置要执行的操作
      参数2是一个数组(可选参),在数组里放置依赖项,不同依赖项会影响第一个参数的执行,当是一个空数组时,副作用函数只会在组件渲染完毕之后执行一次

      不同依赖项参数说明

      useEffect 副作用函数的执行时机存在多种情况,根据传入依赖项的不同,会有不同的执行表现
      依赖项
      副作用函数执行时机
      没有依赖项
      组件初始渲染+组件更新时执行
      空数组依赖
      只在初始渲染时执行一次
      添加特定依赖
      组件初始渲染+特定依赖项变化时执行

      清除副作用

      在useEffect中编写的由渲染本身引起的对接组件外部的操作,社区也经常把它叫做副作用操作,比如在useEffect中开启了一个定时器,我们想在组件卸载时把这个定时器再清理掉,这个过程就是清理副作用,如果不清除可能会导致内存泄漏
      说明:清除副作用的函数最常见的执行时机是在组件卸载时自动执行

      自定义Hook函数

      概念及基础使用

      概念:自定义Hook是以use打头的函数,通过自定义Hook函数可以用来实现逻辑的封装和复用
      封装通用思路:
      1. 声明一个use打头的函数
      1. 把函数体内封装可复用的逻辑(只要是可复用的逻辑)
      1. 把组件中用到的状态或者回调return出去(以对象或数组的形式)
      1. 在哪个组件中要用到这个逻辑,就执行这个函数,解构出来状态和回调函数进行使用

      ReactHooks使用规则

      1. 只能在组件中或者其他自定义Hook函数中调用
      1. 只能在组件的顶层调用,不能嵌套在if、for、其他函数中
       
      Git—全局设置变量React—JSX基础
      Loading...
      Areufm
      Areufm
      一个普通的干饭人🍚
      Announcement
      🎉Welcome to my Blog
      欢迎来到我的博客!
      分享一些日常生活与文章
      感谢关注 共同进步🥰