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

什么样 个人网站 备案适合做网站的软件有哪些

什么样 个人网站 备案,适合做网站的软件有哪些,农村建设房子建设网站建设,wordpress中文前端文章目录1. 本质与使用场景2. 生命周期行为3. 功能范围在 React 中,createRef 和 useRef 都是用于创建引用(ref)来访问 DOM 元素或组件实例的工具,但它们在 使用场景、生命周期行为 和 功能范围 上有显著区别。 1. 本质与使用场景…

文章目录

  • 1. 本质与使用场景
  • 2. 生命周期行为
  • 3. 功能范围

在 React 中,createRef 和 useRef 都是用于创建引用(ref)来访问 DOM 元素或组件实例的工具,但它们在 使用场景、生命周期行为 和 功能范围 上有显著区别。

1. 本质与使用场景

createRef
是一个 类组件和函数组件通用的 API,用于创建一个 ref 对象。
在 类组件 中,通常在 constructor 中初始化,通过 this.refName 访问。
在 函数组件 中可以直接使用,但每次渲染都会创建一个新的 ref 对象(可能导致不必要的更新)。

// 类组件中使用 createRef
class MyComponent extends React.Component {myRef = React.createRef();componentDidMount() {console.log(this.myRef.current); // 访问DOM元素}render() {return <div ref={this.myRef} />;}
}

useRef
是一个 仅用于函数组件的 Hook,不仅能创建 ref 对象,还能 保存任意可变值(类似类组件的 this)。
每次渲染返回 同一个 ref 对象(不会重新创建),避免了 createRef 在函数组件中重复创建的问题。
主要用于函数组件中访问 DOM 或存储跨渲染周期的可变数据。

// 函数组件中使用 useRef
function MyComponent() {const myRef = React.useRef(null);React.useEffect(() => {console.log(myRef.current); // 访问DOM元素}, []);return <div ref={myRef} />;
}

2. 生命周期行为

createRef
在函数组件中,每次组件重新渲染时,createRef 都会创建一个 新的 ref 对象。
这可能导致问题:例如在依赖 ref 的 useEffect 中,会因 ref 引用变化而触发不必要的副作用。

function BadExample() {// 每次渲染都会创建新的 ref 对象const myRef = React.createRef(); // 因 myRef 变化,每次渲染都会执行 useEffectReact.useEffect(() => {console.log(myRef.current); }, [myRef]); return <div ref={myRef} />;
}

useRef
在组件的整个生命周期中,useRef 返回的 ref 对象是 同一个(持久化的),不会随渲染重新创建。
这确保了 ref 引用的稳定性,避免了不必要的副作用触发。

function GoodExample() {// 整个生命周期中只创建一次 ref 对象const myRef = React.useRef(null); // 仅在组件挂载时执行一次(因 myRef 不变)React.useEffect(() => {console.log(myRef.current); }, [myRef]); return <div ref={myRef} />;
}

3. 功能范围

createRef
仅用于 创建 ref 对象,功能单一,其 current 属性主要用于关联 DOM 元素或组件。
useRef
除了创建 ref 访问 DOM 外,还可以 存储任意跨渲染周期的可变值(类似类组件的实例变量)。
因为 useRef 的 current 属性变化不会触发组件重新渲染,适合存储不需要引起 UI 更新的数据(如定时器 ID、上一次的状态值等)。

function TimerExample() {const timerRef = React.useRef(null); // 存储定时器IDconst startTimer = () => {timerRef.current = setInterval(() => {console.log('计时中...');}, 1000);};const stopTimer = () => {clearInterval(timerRef.current); // 跨渲染访问定时器ID};return (<div><button onClick={startTimer}>开始</button><button onClick={stopTimer}>停止</button></div>);
}
特性createRefuseRef
使用场景类组件为主,函数组件慎用仅用于函数组件
渲染时的创建行为每次渲染创建新对象(函数组件中)始终返回同一个对象(持久化)
功能范围仅创建 ref 访问 DOM创建 ref + 存储跨渲染的可变值
与 Hook 配合可能导致不必要的副作用触发适合与 useEffect 等 Hook 配合使用

最佳实践
类组件:使用 createRef。
函数组件:优先使用 useRef(既稳定又能扩展存储功能)。
避免在函数组件中使用 createRef,除非明确需要每次渲染创建新的 ref 对象(极少场景)。

//函数组件中使用createRef示例
import React from 'react';function CreateRefInFunction() {// 1. 使用createRef创建ref(每次渲染都会生成新对象)const inputRef = React.createRef();const logRef = React.createRef();// 2. 操作ref的函数(需在DOM挂载后调用)const handleFocus = () => {// 访问DOM元素:current属性指向关联的DOMinputRef.current?.focus();};const handleLog = () => {logRef.current.textContent = `输入值:${inputRef.current?.value || '空'}`;};// 3. 注意:每次渲染都会打印不同的ref对象(证明createRef每次创建新对象)console.log('当前渲染的ref对象:', inputRef);return (<div style={{ padding: 20 }}><h3>函数组件中使用createRef</h3><inputref={inputRef}type="text"placeholder="点击按钮聚焦"style={{ marginRight: 10 }}/><button onClick={handleFocus}>聚焦输入框</button><button onClick={handleLog} style={{ marginLeft: 10 }}>打印输入值</button><p ref={logRef} style={{ marginTop: 10 }}></p></div>);
}export default CreateRefInFunction;
http://www.dtcms.com/a/541434.html

相关文章:

  • 做设计在哪个网站上找高清图青岛做物流网站
  • 数据源切换的陷阱:Spring Boot中@Transactional与@DS注解的冲突博弈与破局之道
  • Kubernetes节点资源优化:自托管代理配置实践
  • 1688网站怎样做推广东莞市路桥收费所
  • 做网站需要用到哪些开发软件潜江资讯网信息发布
  • Day2实战-元组的基本操作
  • 01 数学建模中M的取值影响及分析
  • 深入 Actix-web 源码:解密 Rust Web 框架的高性能内核
  • Linux远程控制Windows桌面的cpolar实战指南
  • 焦作网站建设哪家好自己怎么用h5做网站
  • 论坛程序做导航网站photoshop安卓版
  • FP16 vs INT8:Llama-2-7b 昇腾 NPU 精度性能基准报告
  • Steering Llama 2 via Contrastive Activation Addition
  • 座舱出行Agent实战(三):专能化架构如何实现效率与稳定性的双重飞跃
  • 淘宝联盟怎么新建网站网站设计教程
  • 一篇文章深入理解Elasticsearch高级用法
  • 【数据工程】14. Stream Data Processing
  • Elasticsearch入门指南:从零到精通
  • wordpress 非插件七牛cdn全站加速东至网站建设
  • 进出口网站贸易平台有哪些个人网站可以做推广吗
  • 游戏网站首页设计服务器有了网站怎么做
  • 计算机组成原理---存储系统
  • Vector深度剖析及模拟实现
  • Linux进程:进程属性
  • word文档做网站建立网站地图
  • 大连建设网节能办公室网站随州网站seo
  • SSM老年公寓管理系统4do68(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 网站制作佛山海拉尔网站建设平台
  • 推客系统开发:从技术架构到业务落地的全栈实现指南
  • Spring Boot 日志体系 Logback + SLF4J 深入剖析