当前位置: 首页 > 知识库问答 >
问题:

反应:映射父组件的子级

花永昌
2023-03-14

因此,我想向附加到组件的任何子级添加某些样式。假设父组件称为,子组件称为。在部分。js我正在尝试以下方法:-

renderChildren = () =>{
  return React.Children.map(this.props.children, (child, i)=>{
    let el = React.cloneElement(child,{
      style: {opacity:0.5}
    })
    return el
  })
}

render(){
  <ScrollView>
       {this.renderChildren()}
   </ScrollView>
}

上述方法对我不起作用。我想知道为什么。还有没有一种方法可以让我在孩子们之间绘制地图,并将他们包装在一个新的组件中?像这样的东西;

this.props.children.map(Child => <Wrapper> <Child/> </Wrapper> )

共有3个答案

沈畅
2023-03-14

这里是您编写属性时的Typescript版本:

  const mapped = Children.map(children, (child, index) => {
    if(React.isValidElement(child)) {
      return React.cloneElement(child, {
        ...child.props,
        isFirst: index === 0,
        isLast: !Array.isArray(children) || index === children.length - 1,
      })
    }
    return null
  })
罗星洲
2023-03-14

我认为这个解决方案对每个孩子来说都是最简单的。渲染子对象时,将接收组件的实例,而不是组件函数。您只需要将实例包装到包装器组件中,如下所示。

this.props.children.map(child => <Wrapper>{child}</Wrapper> )

对于TypeScript:

React.Children.map(props.children, child => {
  return <Wrapper>{child}</Wrapper>
})
杨鸿畅
2023-03-14

要将您的孩子包装到包装器中,只需调用React即可。儿童将映射到包装器组件中:

const OpaqueWrapper = ({ children }) => (
    // check that children is defined 
    // if you do not want your wrapper to be rendered empty
    children && (
        <Wrapper>
            {React.Children.map(children, child => (
                React.cloneElement(child, {style: {...child.props.style, opacity: 0.5}})
            ))}
        </Wrapper>
    )
);

还请注意,必须将提供给原始子级的样式与注入的样式合并,否则将完全失去为子级设置样式的能力。

请参阅此代码沙盒以了解工作示例。

至于为什么它在您的代码中不起作用:您确定您的

编辑:

Slootion将所有子组件包装在一个包装器中,但我想用应用的包装器包装每个子组件,如我的问题所示。

只需将包装器移动到React即可。儿童地图

const OpaqueWrapper = ({ children }) => (        
    React.Children.map(children, child => (
       <Wrapper>
           {React.cloneElement(child, {style: {...child.props.style, opacity: 0.5}})}
       </Wrapper>
    )))
);

 类似资料:
  • 问题内容: 在React中,我有类似的文件 parent.js 包含文本框和按钮 child.js 包含P标签 App.js 包含父组件和子组件 问题 将“父级”上的“文本框”值传递给子级,并将其显示在子级标记中。 完整代码 堆叠 问题答案: 更新了示例以将数据传递给子组件。 https://stackblitz.com/edit/react- trmj9i?file=child.js 在下面添加

  • 问题内容: 我试图映射对象数组,每个数组包含另一个嵌套的对象数组。但是,该映射不适用于嵌套数组。我如何在嵌套数组的内容上进行映射,同时使所有的父对象保持相同? 小提琴: https : //jsfiddle.net/69z2wepo/249197/ 数据结构如下: 地图看起来像 问题答案: 由于每个元素都有一个数组,因此您也必须结束。 例

  • 我现在的问题是,我不知道如何从子组件到父组件进行通信,因为一旦用户选择了一种语言,我想用所选的语言更新下拉列表,所以我需要填充方法handleClick来向父组件发送所选的语言并更新它,但我不知道如何做到这一点。到目前为止,我已经试过了,但没有运气 任何帮助都将不胜感激。

  • 如何设置父组件的状态从子组件内部的反应?子组件只是一个我想设置组件状态的函数。

  • 我正在使用: Spring3.2 Hibernate4.1.9 我需要用JPA映射三个类。A类和B类有很多种关系。A类和B类的唯一组合需要拥有C类的集合。 表A B表 表C 联接表--上的唯一键(fooId、barId) 改变现有的数据结构不是一种选择。 编辑1: 目标:加载一个Foo,获取它的条集合。从每个酒吧,得到它的(他们的!)收集数据。 甲级 B类 C类

  • 我是新的反应,我正在尝试组件功能的风格。我有简单的待办事项清单。我想使用style属性从列表中删除todo项。从Chrome调试模式中,我看不到对复选框更改的即时反应,而且该项也没有删除。。。对我来说,这是如何管理组件状态的问题。我希望得到一些指导。 App.js Todos.js TodoItem.js 我希望这个getStyle()将遵循状态。。。以某种方式