【React】从最外面传递一个子组件进去,如何同时获取多个父组件的属性?

记录一下使用React遇到的一些问题和解决办法。

假设Father1是一个开发人员不想每次都改变的封装类,要求子级只能以外部的形式插进去。

Father1 > Father2 > Father3 > Child1 (Child1是变化的,需要外部定义好传进去)

惯常操作是下面:


// 原始做法
class Father {
	return (
		<Father1>
			<Child1 />  // 这种方式只能传入Father1的属性,不利于使用它的父级传入数据
		</Father1>
	)
}

Father3使用props.children展示Child1,但props.children作为一个变量无法直接传入其属性,但定义时可接收Father1的属性。这意味着要想使用直接父级的属性,需要以function的形式传入。

// 升级做法,既返回了child又可传入两个父级(书写和实际使用)的数据。
class Father {
    aa: string;
    
    // Father1内部封装的时候将该处children获取方式改为getAChild()即可。
    getAChild(father3Props){
      father3Props.aa = aa;
      return  <Child1 {...father3Props}/>
    }
    
	return (
		<Father1 getAChild={this.getAChild} />
    )
}

假设Father2需要调用一下getAChild,也可有所操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你想在 React 中实现多个组件复用,并且在组件事件处理中能够拿到当前操作的组件,可以使用 React 的 Context API。 首先,在组件中定义一个 Context,通过 Context.Provider 来将当前组件作为 Context 的 value 传递给所有组件。然后,在组件中通过 Context.Consumer 来获取当前组件的值。 下面是一个示例代码: ```jsx // 组件 import React, { createContext, useState } from 'react'; // 创建一个 Context const ComponentContext = createContext(null); function ParentComponent() { const [components, setComponents] = useState([]); function handleAddComponent() { setComponents(components => [...components, <ChildComponent key={components.length} />]); } const contextValue = { components, setComponents, }; return ( <ComponentContext.Provider value={contextValue}> <div> {/* 渲染所有组件 */} {components} </div> <button onClick={handleAddComponent}>添加组件</button> </ComponentContext.Provider> ); } // 组件 function ChildComponent() { const { components, setComponents } = useContext(ComponentContext); function handleRemove() { // 通过 Context 获取当前组件的索引,并从组件中移除 const index = components.indexOf(this); setComponents(components => [ ...components.slice(0, index), ...components.slice(index + 1), ]); } return ( <div> <button onClick={handleRemove}>移除</button> </div> ); } ``` 在上面的示例代码中,我们通过 Context 将组件中的 components 数组和 setComponents 函数传递给所有组件。在组件中,我们通过 useContext 来获取当前组件所在的 Context,并从中获取 components 和 setComponents。在组件中,我们可以通过 components 数组和当前组件的索引来获取当前组件的值,从而实现在组件事件处理中拿到当前操作的组件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值