Возвращает 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 в компонент без гражданства?
Ответы
Ответ 1
Похоже, нет, это техническое ограничение в Javascript. Для поддержки функций стрелок и простых функций в качестве "компонентов" Реагирование должно знать, можем ли мы называть их новыми.
Мы можем называть все на всех, если они простые функции, пока они возвращают ReactElement. Однако это не сработает null/false/string возвращает значения, и мы тоже хотим их поддерживать. Мы также не может вызывать новые функции стрелок. Аналогично, мы не можем НЕ новый по классам.
Релевантная проблема GitHub
Ответ 2
Начиная с React 15.0, вы можете вернуть null
из функционального компонента без состояния. (См. # 5355). Больше не нужно возвращать <noscript />
🎉
Изменение, которое сделало это возможным, - это то, что React удалил поддержку классов компонентов, которые не наследуют от React.Component
, что означает, что они могут надежно дифференцировать компоненты React (классы, наследующие React.Component
) и функциональные компоненты без состояния. Таким образом, PR для включения функции просто включает удаление и упрощение кода, который создает компоненты.