Подтвердить что ты не робот

Возвращает null из компонента без состояния или "функционального компонента"

У меня есть функциональный компонент без учета состояния в React 0.14, который работал в React 0.13, но теперь возвращает следующую ошибку:

Нет метода render, найденного в возвращаемом экземпляре компонента: вы можете забыли определить render, вернули null/false из безстоящим компонентом или попытался отобразить элемент, тип которого является функция, которая не является компонентом React.

Это мой компонент:

function ToggleDisplay(props) {
    //should render a <noscript> per React implementation
    if(props.if === false) {
        // return <noscript></noscript>; //do I have to do this manually now?
        return null;
    }

    let style = {};
    if(shouldHide(props)) {
        style.display = 'none';
    }
    return (
        <span style={style} {...props} />
    );
}

Нужно ли мне вручную вернуть <noscript> вручную? Есть ли другой способ вернуть null в компонент без гражданства?

4b9b3361

Ответ 1

Похоже, нет, это техническое ограничение в Javascript. Для поддержки функций стрелок и простых функций в качестве "компонентов" Реагирование должно знать, можем ли мы называть их новыми.

Мы можем называть все на всех, если они простые функции, пока они возвращают ReactElement. Однако это не сработает null/false/string возвращает значения, и мы тоже хотим их поддерживать. Мы также не может вызывать новые функции стрелок. Аналогично, мы не можем НЕ новый по классам.

Релевантная проблема GitHub

Ответ 2

Начиная с React 15.0, вы можете вернуть null из функционального компонента без состояния. (См. # 5355). Больше не нужно возвращать <noscript /> 🎉


Изменение, которое сделало это возможным, - это то, что React удалил поддержку классов компонентов, которые не наследуют от React.Component, что означает, что они могут надежно дифференцировать компоненты React (классы, наследующие React.Component) и функциональные компоненты без состояния. Таким образом, PR для включения функции просто включает удаление и упрощение кода, который создает компоненты.