Могу ли я заблокировать детей-предренеров на React Fiber?

Я написал компонент на React Fiber. Этот компонент получает 1 cond props, и это правда, рендерит детей.

"use strict";
import * as React from "react";
import * as ReactDOM from "react-dom";

interface IfProps {
  cond: boolean;
}

export class If extends React.Component<IfProps, {}> {
  render() {
    const {cond, children} = this.props;

    if (cond) {
      return children;
    } else {
      return null;
    }
  }
}

class TopComponent extends React.Component {
  render() {
    let str: any = null;

    return (
      <div>
        <If cond={str != null}>
          This part not showed.
          {str.length}
        </If>
      </div>
    );
  }
}

ReactDOM.render(<TopComponent />, document.getElementById("app"));

До React Fiber этот код работает. Но теперь React Fiber вызывает ошибку.

Uncaught TypeError: Cannot read property 'length' of null

Я предполагаю, что React Fiber рендерит дочерние элементы до рендеринга компонента. Но это поведение нарушает компонент.

Могу ли я остановить пререндерные потомки компонента?

1 ответ

Проблема в вашем случае не в том, что реакция не принимает null возвращаемое значение (Что это делает ReactComponent.render) Но ваши дети будут оценены, прежде чем они будут переданы If компонент, который означает, что str.length выдает ошибку, которую вы видите.

Базовый пример на основе вашего кода.

Другие вопросы по тегам