首页 > 解决方案 > 是否可以获得当前 JSX 标签的类型?

问题描述

例如,如果我有类似的东西:

<TouchableOpacity style={getStyle(component where this style belong to 'TouchableOpacity')}>

我想传递给getStyle调用函数的函数组件。
如果我通过this.constructor.name了,我会得到组件的屏幕,但不知道如何获取TouchableOpacity.
我想以通用方式使用它,所以我不需要总是编写组件字符串。
这可能吗?

标签: reactjsreact-nativejsx

解决方案


您已经知道组件名称或类,因此您可以直接传递它

<TouchableOpacity
  style={getStyle(TouchableOpacity || 'TouchableOpacity')}
>

getStyle()您的函数无法知道您的组件并自己找出它,因为此函数在您的组件创建之前被调用并完成。

更详细的声明<TouchableOpacity>——实际上是函数的调用——所以可以用f1(). 并且getStyle()可以替换为f2().

所以你在问,如何在函数中知道f2()哪个函数使用它的结果(的结果f2())作为参数。在下一个声明中:

f1(f2())

所以答案是否定的。

但是,如果您如上所述通过,getStyle(TouchableOpacity)您可以获得组件的标签名称或显示名称,如下所示:

function getStyle(component) {
  console.log('tag name:', component.type.name)
  console.log('display name:', component.type.displayName)
}

getStyle(TouchableOpacity)

推荐阅读