在React组件的render()中查找特定类型的子级

时间:2018-08-06 14:00:59

标签: javascript reactjs draftjs

我正在使用Draft.js,需要递归到props.children中才能找到类型为DraftEditorBlock的组件。

由于某种原因,这似乎并不起作用:

import React from 'react';
import { DraftEditorBlock } from 'draft-js';
...
export default class MyBlockRenderer extends React.Component {
  ...
  render() {
    const { children } = this.props;
    const firstChild = React.Children.toArray(children)[0];
    if (firstChild instanceof DraftEditorBlock) {
      ...
    }
    ...
  }
}

使用instanceof的行会导致此错误:

TypeError: Right-hand side of 'instanceof' is not an object

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

自上而下阅读draftjs源代码中的render()方法。 DraftEditorBlockDraftEditor之间仍然有许多级别。

除了通过以下方式在DraftEditorBlock中找到它们之外,我建议您缓存所有已创建/装入的render()

  1. 使组件继承DraftEditorBlock或具有单个<DraftEditorBlock ... />子代的新组件。
  2. 使用textblockRendererFn块类型映射到您的组件。

应该工作。