react--Hooks基础

一、hooks概念理解

React体系里组件分为 类组件 和 函数组件

经过多年的实战,函数组件是一个更加匹配React的设计理念 UI = f(data),也更有利于逻辑拆

分与重用的组件表达形式,而先前的函数组件是不可以有自己的状态的,为了能让函数组件可以

拥有自己的状态,所以从react v16.8开始,Hooks应运而生

注意:

hooks只能在函数组件中使用

二、useState

1、基础使用

使用步骤

1.导入useState函数

2.执行这个函数并传入初始值 必须在函数组件中

3.[数据, 修改数据的方法]

4.使用数据 修改数据

import { useState } from "react";

function App() {
  const [count, setCount] = useState(0)
  
  return (
    <div className="App" style={{width: '30%',border: '2px solid #111',padding: '5px'}}>
      <button onClick={() => setCount(count + 1)}>{count}</button>
    </div>
  );
}

export default App;

2、状态的读取和修改

const [count, setCount] = useState(0)  // 解构赋值 useState返回值是一个数组

1、useState传过来的参数 作为count的初始值

2、 [count, setCount] 名字可以自定义保持语义化

 顺序不可以变 第一个参数是数据状态 第二个参数是修改数据的方法

3、setCount函数

用来修改count 依旧保持不能直接修改原值还是生成一个新值替换原值

setCount(基于运算得到的新值)

4、count和setCount是一对 是绑在一起的 setCount只能用来修改对应的count值

3、组件的更新过程

当调用setCount时 更新的过程

1、首次渲染

首次被渲染的时候 组件内部代码会被执行一个

其中useState也会跟着执行 重点 初始值只在首次渲染生效

2、更新渲染 setCount都会更新

1.app组件会再次渲染 这个函数再次执行

2.useState再次执行 得到的新的count值不是0而是修改后的1 模板会用新增渲染

重点:

useState初始值只在首次渲染生效 后续只要调用setCount整个app中代码都会执行

此时count每次拿到的都是最新值

import { useState } from "react";

function App() {
  // count:数据状态
  // setCount:修改count的函数(专有函数)

  // useState 函数可以执行多次,每次执行互相独立,每调用一次为函数组件提供一个状态
  const [count, setCount] = useState(0)

  const [show, setShow] = useState(false)

  const [list, setList] = useState([])
  
  function test() {
    setShow(true)
    setList([1,2,3,4])
    console.log(show,list)
  }

  return (
    <div className="App" style={{width: '30%',border: '2px solid #111',padding: '5px'}}>
      <button onClick={() => setCount(count + 1)}>count:{count}</button>
      <button onClick={test}>show:{show?'true':'false'}---list{list}</button>
    </div>
  );
}


export default App;

注意事项:

1. 只能出现在函数组件或者其他hook函数中

2.  不能嵌套在if/for/其它函数中(react按照hooks的调用顺序识别每一个hook)

let num = 1
function List(){
  num++
  if(num / 2 === 0){
     const [name, setName] = useState('cp') 
  }
  const [list,setList] = useState([])
}
// 俩个hook的顺序不是固定的,这是不可以的!!!

三、useEffect  副作用

对于 React 组件来说,主作用就是根据数据(state/props)渲染 UI,除此之外都是副作用(比如,手动修改 DOM)

1、基础使用

在修改数据直接 把count值放到页面标题中

1.导入uerEffect函数

2.在函数组件中执行 传入回调 并定义副作用

3.当我们通过修改状态更新组件时,副作用也会不断执行

2、依赖项控制执行时机

1.默认状态(无依赖项) 组件初始化时先执行一次 等每次数据修改更新再次执行

2.添加空数组依赖项 组件只在首次渲染时执行一次 其余时间不执行

3.添加特定依赖项 副作用函数在首次渲染时执行,在依赖项发生变化时再次执行

4.注意事项: 只要在useEffect 回调函数中用到的数据(比如,count)就是依赖数据,就应该出现在依赖项数组中,如果不添加依赖项就会有bug出现

import { useState } from "react";
import { useEffect } from "react";

function App() {
  const [count, setCount] = useState(0)

  const [name, setName] = useState('')
  
  // 1、
  // useEffect(() =>{
  //   // 定义副作用
  //   document.title = count
  // })

  // 2、
  // useEffect(() =>{
  //   // 只在首次渲染时执行一次
  //   document.title = count
  // },[])

  // 3、
  useEffect(() =>{
    console.log('副作用执行')
    // 定义副作用
    document.title = count
  },[count])

  return (
    <div className="App" style={{width: '30%',border: '2px solid #111',padding: '5px'}}>
      <button onClick={() => setCount(count + 1)}>count:{count}</button>
      <button onClick={() => setName('ddd')}>name:{name}</button>
    </div>
  );
}

export default App;

注意:

某种意义上 hook的出现 就是想不用生命周期概念也可以写业务代码

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值