React基础之useEffect

概念

useEffect是一个React Hook函数,用在React组件中创建不是由事件引起的而是由渲染本身引起的操作,比如发送Ajax,更改Dom等

import React, { useState } from 'react';

import { useEffect } from 'react';

const URL='http://geek.itheima.net/v1_0/channels'

function App() {

const [list,setList]=useState([])

useEffect (() => {

// 额外的操作 获取频道参数

async function getList (){

const res = await fetch ( URL )

const jsonRes = await res . json ()

console . log ( jsonRes );

setList ( jsonRes . data . channels )

}

getList ()

},[])

const msg='this is app msg'

return (

<div>

this is app

<ul>

{list.map(item=><li key={item.id}>{item.name}</li>)}

</ul>

</div>

);

}

export default App;

useEffect依赖项参数说明

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

清除useEffect副作用

在useEffect中编写的由渲染本身引起的对接组件外部的操作,社区中也将称为副作用

如我们在useEffect中开启了一个定时器,我们想在组件卸载的时候,将这个定时器清理掉,这个过程就成为清理副作用

清除副作用的函数最常见的执行时机就是在组件卸载时自动执行

import React, { useState } from 'react';

import { useEffect } from 'react';

function Son(){

//渲染完毕之后开启一个定时器

useEffect(()=>{

const timer= setInterval(()=>{

console.log('定时器执行中');

},1000)

return () => {

// 清除副作用 ( 组件卸载时 )

clearInterval ( timer )

}

},[])

return < div > this is son </ div >

}

function App() {

//通过条件渲染模拟组件卸载

const [show,setShow]=useState(true)

return (

<div>

{show&&<Son/>}

<button onClick={()=>{setShow(false)}}>卸载子组件</button>

</div>

);

}

export default App;

封装自定义hook

1.在hook文件夹中创建一个use打头的函数

2.在这个函数中封装逻辑并导出

3.需要使用的地方进行导入即可

实例代码

//封装获取频道列表的逻辑

import {

useEffect,

useState

} from "react"

import {

getChannelAPI

} from '@/api/article';

function useChannel() {

const [channelList, setChannelList] = useState([])

useEffect(() => {

//1.封装函数,在函数体中调用接口

const getChannelList = async () => {

const res = await getChannelAPI()

setChannelList(res.data.channels)

}

getChannelList()

}, [])

return {

channelList

}

}

export {

useChannel

}

d

分页实现逻辑思路

1.计算总页数(页数=总数/每页条数)

2.点击分页拿到当前点击页数

3.使用页数作为请求参数重新获取文章列表渲染

注意,我们删除之后需要重新渲染数据,此时可以通过触发useState的方法来实现数据的更新

表单回填

1.创建一个form来获取实例

//获取实例

const [form]= Form.useForm()

2.给表单绑定对应的form属性

<Form

labelCol={{ span: 4 }}

wrapperCol={{ span: 16 }}

initialValues={{ type: 0 }}

onFinish={onFinish} // 添加 onFinish 处理函数

form = { form }

>

3.调用setFieldsValue回填函数

useEffect(()=>{

//1.通过id获取数据

async function getArticleDetail(){

const res= await getArticleById(articleId)

console.log(res.data);

form . setFieldsValue ( res . data )

}

getArticleDetail()

//2.蒋数据回填

},[articleId,form])

time set night

相关推荐
会跑的葫芦怪5 小时前
若依Vue 项目多子路径配置
前端·javascript·vue.js
2601_949593655 小时前
基础入门 React Native 鸿蒙跨平台开发:模拟智能音响
react native·react.js·harmonyos
xiaoqi9226 小时前
React Native鸿蒙跨平台如何进行狗狗领养中心,实现基于唯一标识的事件透传方式是移动端列表开发的通用规范
javascript·react native·react.js·ecmascript·harmonyos
jin1233226 小时前
React Native鸿蒙跨平台剧本杀组队消息与快捷入口组件,包含消息列表展示、快捷入口管理、快捷操作触发和消息详情预览四大核心功能
javascript·react native·react.js·ecmascript·harmonyos
烬头88218 小时前
React Native鸿蒙跨平台实现二维码联系人APP(QRCodeContactApp)
javascript·react native·react.js·ecmascript·harmonyos
pas1368 小时前
40-mini-vue 实现三种联合类型
前端·javascript·vue.js
摇滚侠8 小时前
2 小时快速入门 ES6 基础视频教程
前端·ecmascript·es6
2601_949833398 小时前
flutter_for_openharmony口腔护理app实战+预约管理实现
android·javascript·flutter
军军君019 小时前
Three.js基础功能学习十三:太阳系实例上
前端·javascript·vue.js·学习·3d·前端框架·three
xiaoqi92210 小时前
React Native鸿蒙跨平台如何实现分类页面组件通过searchQuery状态变量管理搜索输入,实现了分类的实时过滤功能
javascript·react native·react.js·ecmascript·harmonyos