当前位置: 首页 > news >正文

学习react第二天

表单数据双向绑定

类似v-model

function App() {// 定义响应式数据const [value, setValue] = useState('')console.log(value);return (<>// 绑定数据和onChange方法<inputvalue={value}onChange={(e) => setValue(e.target.value)}type="text"></input></>)
}

获取Dom元素

使用useRef来获取

function App() {// 获取的dom元素需要再组件渲染完成之后(dom生成后)才能使用const inputRef = useRef(null)const getDom = () => {console.dir(inputRef.current);}return (<><inputref={inputRef}type="text"></input><button onClick={() => getDom()}>获取dom</button></>)
}

组件通信

父传子props

// 子组件通过形参props接收父组件传递的数据
function Son(props) {return (<><h2>我是子组件{props.text}</h2>{/* 写在子组件中的内容可以通过children接受 */}<div>{props.children}</div><div>{props.child}</div>{props.isTrue ? <h2>条件为真</h2> : <h2>条件为假</h2>}<ul>{props.list.map((item, index) => (<li key={index}>{item}</li>))}</ul><button onClick={props.fun}>点击执行父组件传递的函数</button></>)
}function App() {const text = useState('hello world')return (<><div>{/* 父组件传递数据 */}<Son text={text}age={18}isTrue={true}list={['vue', 'react']}fun={() => console.log('1111')}child={<span>333</span>}><span>2222</span></Son></div></>)
}

子传父

通过接受父组件的方法传递参数,来实现子传父

// 子组件通过形参props接收父组件传递的数据
function Son(props) {const sonMsg = '我是子组件的数据'return (<><h2>我是子组件{props.text}</h2><button onClick={() => props.onGetMsg(sonMsg)}>111</button></>)
}function App() {const [msg, setMsg] = useState('')const getMsg = (msg) => {setMsg(msg);}return (<><div>{msg}<SononGetMsg={getMsg}></Son></div></>)
}

跨层级传递

使用context实现

import { createContext, useContext, useState } from 'react'
import './App.css'const msgContent = createContext()
// 子组件通过形参props接收父组件传递的数据
function A() {return (<>AAAAA<B></B></>)
}function B() {const msg = useContext(msgContent)return (<><div>{msg}</div></>)
}function App() {const [msg, setMsg] = useState('hello context')return (<><div><msgContent.Provider value={msg}><A></A></msgContent.Provider></div></>)
}export default App

useEffect

类似onMounted,created

const Url =' http://geek.itheima.net/v1_0/channels'
function App() {useEffect(() => {fetch(Url).then(res => res.json()).then(res => {console.log(res.data.channels);setList(res.data.channels)})}, [])const [list, setList] = useState([])return (<><div>{list.map(item => (<li key={item.id}>{item.name}</li>))}</div></>)
}

依赖参数说明

清除副作用函数,在useEffect回调函数里return(最常见的是在组件销毁时起作用)一个回调

import { useEffect, useState } from "react"function Son () {// 1. 渲染时开启一个定时器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)}>卸载Son组件</button></div>)
}export default App

自定义Hook

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

1.声明一个use打头的函数

2.在函数体内封装可复用的逻辑

3.return所需要的数据和函数

4.在哪个组件中要使用就调用函数,解构出所需的数据

import { useState } from 'react'
import './App.css'function useToggle() {const [value, setValue] = useState(true)const toggle = () => {setValue(!value)}return { value, toggle }
}function App() {const {value, toggle} = useToggle()return (<div className="App">{value && <h1>Hello Vite + React!</h1>}<button onClick={() => toggle()}>toggle</button></div>)
}export default App

Hook使用规则

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

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

复习一下常用库

dayjs:处理日期,可按格式输出

uuid:生成唯一id

http://www.dtcms.com/a/600617.html

相关文章:

  • 【JVS更新日志】低代码、APS排产、物联网、企业计划11.12更新说明!
  • 前端注释规范:如何写“后人能看懂”的注释(附示例)
  • C语言编译器下载地址 | 如何选择适合自己的C语言编译器
  • HarmonyOS之深入解析如何实现语音朗读能力
  • 台州企业网站的建设做网站能挣多少钱
  • 网站开发内容包括哪些wordpress 统计代码
  • 【昇腾CANN工程实践】BERT情感分析API性能优化实录:从CPU到NPU的15倍加速
  • 【Linux基础开发工具 (二)】详解Linux文本编辑器:Vim从入门到精通——完整教程与实战指南(上)
  • 使用 BR 备份 TiDB 到阿里云 OSS 存储
  • 机器学习项目——基于集成学习提升树情绪分类(代码/论文)
  • C++ 抽象类与多态原理深度解析:从纯虚函数到虚表机制(附高频面试题)
  • 尚硅谷 SpringCloud 01 分布式概念-工程创建-nacos安装-nacos服务注册与发现 -远程调用
  • C# Sqlite帮助类
  • 传统方式部署 Hadoop 高可用集群
  • 微软 Win11 经典版 Outlook 曝 BUG,加速 SSD 损耗
  • C++在边缘AI加速中的硬件优化:结合位运算与SIMD提升推理效率
  • 网站开发文档撰写作业牡丹江整站优化
  • QT:ItemView视图控件
  • 让UI完全按屏幕比例变化的方法
  • 结项报告完整版:Apache SeaTunnel 支持 Flink 引擎 Schema Evolution 功能
  • 微服务生态组件之Spring Cloud LoadBalancer详解和源码分析
  • 重庆长寿网站设计公司哪家专业网站跳转微信链接
  • 阿里云域名DNS解析URL转发不支持HTTPS?
  • leetcode 2654. 使数组所有元素变成 1 的最少操作次数 中等
  • AI取名大师 | PM2 部署 Bun.js 应用及配置 Let‘s Encrypt 免费 HTTPS 证书
  • 结项报告完整版 | Apache SeaTunnel支持metalake开发
  • 【cursor】进阶技巧Rules
  • WebServer05
  • 【数据分析-Excel】常用函数汇总
  • 深入理解MySQL事务隔离级别与锁机制(从ACID到MVCC的全面解析)