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

如何让孩子们打字

昝宜
2023-03-14

我试图使我自己的选项卡组件,以便我可以在我的应用程序中使用选项卡。然而,我似乎有问题,试图提取我需要的类型的子组件。

import React from 'react'

export class Tabs extends React.Component {
  render() {
    let children = this.props.children
    let tablinks = React.Children.map(children, x => {
      console.log(x.type.displayName) // Always undefined
      if (x.type.displayName == 'Tab Link') {
        return x
      }
    })

    return (
      <div className="tabs"></div>
    )
  }
}

export class TabLink extends React.Component {
  constructor(props) {
    super(props)
    this.displayName = 'Tab Link'
  }
  render() {
    return (
      <div className="tab-link"></div>
    )
  }
}
<Tabs>
    <TabLink path="tab1">Test</TabLink>
    <TabLink path="tab2">Test2</TabLink>
</Tabs>

我的控制台。日志从不返回“选项卡链接”,它总是返回未定义的,为什么?

共有3个答案

姬天逸
2023-03-14

您可以使用已定义的名称属性:

if (x.type.name === TabLink.name) {
    return x
}

我建议使用TabLink。名称而不是'TabLink'字符串,以便更好地维护。

见:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name

归浩博
2023-03-14

它是未定义的,因为displayName应该是静态属性。

class TabLink extends React.Component { 
  constructor(props) {
    super(props)
  }
  render() {
    return (
      <div className="tab-link"></div>
    )
  }
} 
TabLink.displayName = 'Tab Link'

JSFIDLE(检查控制台)

王波
2023-03-14

作为替代方案,您可以使用

console.log(x.type.name) // this would be 'TabLink'

在这种情况下,不需要显式定义displayName。

https://jsfiddle.net/lustoykov/u1twznw7/1/

 类似资料:
  • 问题内容: 我在父容器中有两个子元素,如下所示: 我尝试了以下CSS: 我怎样才能让两个孩子()都达到最高的孩子的身高? 问题答案: 一种解决方案是将后代元素的显示值从更改为:

  • 我有这样的代码: 是否可以立即将“MouseEvent事件”传播到<code>javafx.scene.shape。行(代码中的行)对象?我尝试了<code>行。getEventDispatcher()。dispatchEvent(事件,空) 但我收到了以下消息错误: 线程“JavaFX应用程序线程”java.lang.NullPointerException中的异常,位于com.sun.Java

  • 这样不仅可以将转移页面的子元素放入数组,还可以将子元素的子元素放入数组。

  • 问题内容: 我有一排2列。在这些列中,我有一个标题,内容和列表。它们具有不同的内容长度。 我要实现的是,该列表在同一行上彼此相邻,而不会破坏引导程序移动优化。 我首先尝试了3个不同的行,但是当列断开时,内容不再属于彼此。没有JavaScript,有没有我需要的解决方案?也许以某种方式使用flexbox? 这是我当前的代码: 问题答案: 为了能够实现这一目标,而无需使用脚本,所有项目(,,,)需要

  • 问题内容: 最初,我一直在尝试获取父母的名单以及每个父母的一个最近的孩子。我已经知道如何使用以下查询 但是问题是,结果不包括没有孩子的父母。添加也无济于事。所以我想我可以对所有没有孩子的父母进行查询,然后将这两个查询合并为一个查询。但是我在建立这样的查询时遇到了麻烦。将不胜感激任何建议。 问题答案: 这是您的查询:

  • 问题内容: 我在这里有一个简单的设置: 我有一个父组件,该父组件有2个子组件。在第一个子组件中:用户更改输入的值。然后,该更改的值将是我想要从该孩子传递给父对象的道具,以便可以将其传递给与同一父组件相连的另一个孩子。 当前设置的这个,请查看 从用户输入到UI更改的流程:1.在“ Child 1”中:调整一个滑块,将onChange值传递给父组件;2.将此属性(新的滑块值)传递给Parent组件,以