获取DOM

获取DOM

1、获取DOM

javascript 复制代码
import React, { PureComponent, createRef } from 'react'

export class App extends PureComponent {
	constructor() {
		super()
		
		this.titleRef = createRef()
		
		this.titleEL = null
	}

	getNativeDOM() {
		`方式1、在React元素上绑定一个ref字符串`
		console.log('ref=', this.refs.why)
		
		`方式2、使用 createRef 提前创建一个ref对象,并将其绑定到DOM元素上`
		console.log('ref=', this.titleRef.current);
		
		`方式3、在DOM上传入一个箭头函数,此DOM被渲染时,回调函数被执行,就获取到DOM了`
		console.log('this.titleEL=', this.titleEL);
	}

	render() {
		return (
			<div>
				<h2 ref="why">Hello World</h2>
				
				<h2 ref={this.titleRef}>方式2 - 你好啊</h2>
				
				<h2 ref={el => this.titleEL = el}>方式3 - 你好啊</h2>
				
				<button onClick={e => this.getNativeDOM()}>获取原生DOM</button>
			</div>
		)
	} // end-render
}

export default App

2、获取类组件实例

javascript 复制代码
import React, { PureComponent, createRef } from 'react'

`HelloWorld 组件`
class HelloWorld extends PureComponent {
	constructor() {
		super()
	}

	test() {
		console.log('我是 HelloWorld 组件中的 test方法')
	}

	render() {
		return <div>hello World</div>
	}
}


`App 组件`
export class App extends PureComponent {
	constructor() {
		super()
		
		this.hwRef = createRef()
	}

	getComponent() {
		`获取 子组件 HelloWorld 的实例`
		console.log('ref=', this.hwRef.current)
		`在这里可以调用 子组件中的方法`
		this.hwRef.current.test()
	}

	render() {
		return (
			<div>
				<HelloWorld ref={this.hwRef}></HelloWorld>
				
				<button onClick={e => this.getComponent()}>获取组件实例</button>
			</div>
		)
	}
}

export default App

3、获取函数式组件的DOM

javascript 复制代码
import React, { PureComponent, createRef, forwardRef } from 'react'

` 获取,函数式组件中的某个DOM,使用 forwardRef(props, ref) 高阶函数
  forwardRef:用于,将 ref 从父组件,透传到子组件内部的DOM元素。`
const HelloWorld = forwardRef((props, ref) => {
	return (
		<div>
			<h1 ref={ref}>函数式组件, 获取DOM</h1>
			<p>函数式组件 hello World</p>
		</div>
	)
})

export class App extends PureComponent {
	constructor() {
		super()
		this.hwRef = createRef()
	}

	getComponent() {
		console.log('ref=', this.hwRef.current)
	}

	render() {
		return (
			<div>
				<HelloWorld ref={this.hwRef}></HelloWorld>
				<button onClick={e => this.getComponent()}>获取组件实例</button>
			</div>
		)
	} // end-render
}

export default App
相关推荐
烬羽8 小时前
React Router v7 完全指南:一个 Demo 吃透前端路由
javascript·react.js·前端框架
烬羽8 小时前
React Router 嵌套路由:一个 `Outlet` 引发的布局思考
react.js·面试·前端框架
kyriewen11 小时前
别再这样写条件渲染了——你的React组件里藏着这5种定时炸弹
前端·javascript·react.js
mONESY13 小时前
🎨 从零搭建 React + TypeScript + Vite 项目:以 Color Picker 为例,聊聊前端工程化的 model/api 分层架构
react.js
阿黎梨梨19 小时前
从“能用”到“好维护”:React + TypeScript 实战指南
react.js
无人生还19 小时前
从 Vue3 到 React · 快速上手系列第 11 篇:状态管理
前端·vue.js·react.js
GuWenyue19 小时前
90%前端写React TS都踩坑!一套父子组件+Hooks完整实战,彻底搞懂类型约束
前端·react.js
张元清20 小时前
React useMeasure Hook:用 ResizeObserver 测量 DOM 元素 (2026)
javascript·react.js
朝阳3921 小时前
react19【实战】配置化路由登录鉴权完整方案
前端·javascript·react.js
名字还没想好☜1 天前
React 用 IntersectionObserver 实现图片懒加载与无限滚动:封装一个 useInView Hook
前端·javascript·vue.js·react.js·react