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

类型检查对子项的反应

訾凯歌
2023-03-14

我如何确认通过props(例如子元素)接收的反应html" target="_blank">元素在我的渲染方法中属于给定类型?

假设我有一个列表元素和一个列表项元素。在List的render方法中,我想查找传递的所有子项,并对ListItems中的任何子项执行一些特殊的操作。

我确实找到了一个可行的实现,但只是在反复试验之后。请参阅下面的代码。(第15.4.2节)

我ist.jsx

import ListItem from 'list-item';

...

React.Children.map(children, child => {
  console.log(child);     // function ListItem() { ... }
  console.log(ListItem);  // function ListItem() { ... }
  
  if (isListItem(child)) {
    return (...);
  }
  return child;
})

// this implementation does not work
isListItem(element) {
  return (element.type === ListItem);
}

// this implementation does work, but might break if I'm using something like uglify or if I use `react-redux` and `connect()` ListItem (as that will change the display name)
isListItem(element) {
  return (element.type.displayName === 'ListItem');
}

// this implementation does work
isListItem(element) {
  return (element.type === (<ListItem />).type);
}

名单我tem.jsx

class ListItem expends React.component {
  ...
}

export default ListItem;

所以,最后一个实现似乎可以工作,但是为什么第一个实现不能工作呢?我在react文档中找不到任何与此相关的资料,尽管我确实发现了一些关于相同内容的堆栈溢出问题。但是,这些问题中提供的答案表明,第一个实现应该可以工作(尽管它们适用于旧版本的React)

>

  • 在反应组件中只允许特定类型的子级

    比较两个组件-组件X是组件A的实例吗

  • 共有1个答案

    微生啸
    2023-03-14

    虽然这个问题很老,但我在使用react-hot-loader时遇到了这个问题,并花了一段时间才最终找到这个GitHub问题,解释为什么它会这样。

    这是预期的,react-hot-loader@3补丁React.create元素(

    -@nfcampos

    除了您发现的方法之外,RHL现在还提供了一个areComponentsEqual()函数,在其自述文件中有一个专用部分。

    import { areComponentsEqual } from 'react-hot-loader'
    
    const element = <Component />
    areComponentsEqual(element.type, Component) // true
    

     类似资料:
    • 我定义了这种类型 我想检查一个对象是否来自该类型,但没有办法。我已经尝试过了 我有一个错误:

    • 问题内容: 我有几个共享一些字段的namedtuple。我有一个接受这些元组的函数,并保证仅与共享字段进行交互。我想在mypy中对此类代码进行类型检查。 该代码的示例为: 当我在此代码上运行mypy时,我得到一个可预测的错误: mypy_example.py:20:错误:“ DoSomething”的参数1具有不兼容的类型“ BaseExtended”;预期的“基础” 有没有办法构造我的代码并保持

    • 我有一个使用compare方法的类。该方法将两个对象作为参数。使用java反射,我能够获得所有私有和受保护的字段,并使用一些花哨的东西检查它们的返回类型,然后对它们做我想做的事情。 这对我个人有好处。我知道我想做什么,所以我只是比较两个相同类型的对象,仅此而已。 所以物体是一样的,只是换了位置..有办法防止这种情况吗?我有一个跟踪代码来存储这些对象中的每一个差异..所以如果他们有不同的立场,我会有

    • Blockly完全支持JS和Python之类的动态类型的模型,并且还包括对C / C ++之类的静态类型的模型的支持,但需要做一些额外的工作。 在这两种情况下,Blockly都可以防止构造一些非理性的组合。以下三个模块之间没有业务联系: Blockly的每种连接类型(值输入/输出,下一个/上一个语句)都可以用类型信息标记,以便显然无效的连接将拒绝连接。这为用户提供了即时反馈,并避免了许多简单的错误

    • 问题内容: 有时需要检查Python中的参数。例如,我有一个函数可以接受网络中其他节点的地址作为原始字符串地址,也可以接受封装其他节点信息的类Node。 我使用type()函数,如下所示: 这是这样做的好方法吗? 更新1: Python 3具有函数参数的注释。可以使用以下工具将其用于类型检查:http ://mypy-lang.org/ 问题答案: 使用。样品: