react经验11:访问循环渲染的子组件内容

前有访问单个子组件的需求,现在进一步需要访问循环渲染中的子组件。
访问单个子组件的成员

实施步骤

子组件//child.tsx

ts 复制代码
export declare type ChildInstance={
	childMethod:()=>void
}
const Child=(props:{
	value:string
	onMounted?:(ref:ChildInstance)=>void
})=>{
	function childMethod(){
		console.log(`子组件-${props.value}的函数被访问了`)
	}
	useEffect(()=>{
		if (props.onMounted) {
            props.onMounted({
                childMethod
            })
        }
	},[])
	return (
		<div>这是子组件-{props.value}</div>
	)
}
export default Child

父组件//parent.tsx

ts 复制代码
function getRandomWithRange(minNum: number, maxNum: number) {
    return Math.floor(Math.random() * (maxNum - minNum + 1) + minNum)
}
const list=[1,2,3,4,5]
const Parent=()=>{
	const childRefs=useRef<{[key:number]:ChildInstance}>({})
	function handleChildMounted(ref:ChildInstance,value:number){
		childRefs.current[value]=ref
	}
	function randomCallChild(){
		const value=getRandomWithRange(1,5)
		const child=childRefs.current[value]
		child.childMethod()
	}
	return (
		<div>
			<h1>这是父组件</h1>
			<button onClick={randomCallChild}>随机访问一个子组件</button><br/>
			以下是循环渲染的子组件
			{
				list.map(value=>(
					<Child key={value} value={value} onMounted={e=>handleChildMounted(e,value)}/>
				))
			}
		</div>
	)
}
export default Parent

思路说明:

在子组件中通过初始化事件将内部的"引用"传递给外面,外面通过这个"引用"访问子组件的内部。

相关推荐
想睡八个小时6 小时前
已包含的文件名 “a.vue“ 仅大小写与文件名 “A.vue“ 不同
前端·vscode
阿奇__7 小时前
element二次封装组件套餐 搜索组件 表格组件 弹窗组件
javascript·vue.js·elementui
The_era_achievs_hero7 小时前
Echarts
前端·javascript·echarts
亮子AI7 小时前
【JavaScript】修改数组的正确方法
开发语言·javascript·ecmascript
涔溪8 小时前
Vite 和 Webpack 这两款主流前端构建工具的核心区别,包括它们的设计理念、工作机制和实际使用体验上的差异。
前端·webpack·vite
0思必得08 小时前
[Web自动化] 开发者工具元素(Elements)面板
运维·前端·自动化·web自动化·开发者工具
遇到困难睡大觉哈哈8 小时前
Harmony os ——ArkTS 语言笔记(五):泛型、空安全与可选链
前端·笔记·安全·harmonyos·鸿蒙
可触的未来,发芽的智生8 小时前
微论-自成长系统引发的NLP新生
javascript·人工智能·python·程序人生·自然语言处理
八哥程序员8 小时前
你真的理解了 javascript 中的原型及原型链?
前端·javascript
冴羽9 小时前
10 个 Nano Banana Pro 专业级生图技巧
前端·人工智能·aigc