Можно ли вернуть пустую в реакцию рендера?
У меня есть компонент уведомления, и у меня есть параметр тайм-аута для него. после таймаута я вызываю this.setState({isTimeout:true})
.
То, что я хочу сделать, это если уже тайм-аут, я хочу просто ничего не делать:
render() {
let finalClasses = "" + (this.state.classes || "");
if (isTimeout){
return (); // here has some syntax error
}
return (<div>{this.props.children}</div>);
}
проблема: return(); //здесь есть синтаксическая ошибка
Ответы
Ответ 1
Да, вы можете, но вместо пустого, просто вернуть null
если вы не хотите render
что-либо из компонента, например так:
return (null);
Другим важным моментом является то, что внутри JSX, если вы визуализируете элемент условно, то в случае condition=false
вы можете вернуть любое из этих значений false, null, undefined, true
. Согласно DOC:
booleans (true/false), null, and undefined
являются допустимыми дочерними элементами, они будут игнорироваться, то есть просто не будут отображаться.
Все эти выражения JSX
будут отображаться одинаково:
<div />
<div></div>
<div>{false}</div>
<div>{null}</div>
<div>{undefined}</div>
<div>{true}</div>
Пример:
Будут отображаться только нечетные значения, потому что для четных значений мы возвращаем null
.
const App = ({ number }) => {
if(number%2) {
return (
<div>
Number: {number}
</div>
)
}
return (null); //===> notice here, returning null for even values
}
const data = [1,2,3,4,5,6];
ReactDOM.render(
<div>
{data.map(el => <App key={el} number={el} />)}
</div>,
document.getElementById('app')
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id='app' />
Ответ 2
Некоторые ответы немного неверны и указывают на неправильную часть документов:
Если вы хотите, чтобы компонент ничего не рендерил, просто верните null
согласно документу:
В редких случаях вам может понадобиться скрыть компонент, даже если он был визуализирован другим компонентом. Для этого верните ноль вместо вывода рендера.
Например, если вы попытаетесь вернуть undefined
, вы получите следующую ошибку:
Ничего не было возвращено из рендера. Обычно это означает, что отсутствует инструкция возврата. Или, чтобы ничего не визуализировать, верните null.
Как указано в других ответах, null
, true
, false
и undefined
являются допустимыми дочерними элементами, что полезно для условного рендеринга внутри вашего jsx, но если вы хотите, чтобы ваш компонент ничего не скрывал/рендерил, просто верните null
.
Ответ 3
Да, вы можете вернуть пустое значение из метода рендеринга React.
Вы можете вернуть любое из следующих значений: false, null, undefined, or true
Согласно документам:
false
, null
, undefined
и true
являются действительными дочерними элементами. Они просто не делают.
Вы могли бы написать
return null; or
return false; or
return true; or
return undefined;
Однако return null
является наиболее предпочтительным, поскольку он означает, что ничего не возвращается
Ответ 4
Немного не по теме, но если вам когда-либо понадобился компонент на основе класса, который никогда ничего не делает, и вы счастливы использовать какой-то еще не стандартизованный синтаксис ES, вы можете захотеть:
render = () => null
Это в основном метод стрелок, который в настоящее время требует плагина Babel для класса-класса. Реакция не позволит вам определить компонент без функции render
и это наиболее сжатая форма, удовлетворяющая этому требованию, о котором я могу думать.
В настоящее время я использую этот трюк в варианте ScrollToTop, заимствованном из документации по react-router
. В моем случае есть только один экземпляр компонента, и он ничего не отображает, поэтому короткая форма "рендеринга null" подходит для этого.
Ответ 5
Мы можем вернуться так,
return <React.Fragment />;