2015-10-19 1 views
5

Я не хочу, чтобы сделать название, когда описание пустоПроверьте, реагирует элемент пуст

var description = <MyElement />; // render will return nothing in render in some cases 

if (!description) { // this will not work because its an object (reactelement) 
    return null; 
} 

<div> 
    {title} 
    {description} 
</div> 

Что правильный путь вместо описания! Чтобы проверить, если его пустым?

+0

У вас есть какое-либо состояние/реквизит, который вы можете проверить, чтобы увидеть, должно ли быть описание _should_ пустым? Лучше сделать проверку, используя эти, а не проверять дочерние элементы. – J3Y

+0

Нет, на самом деле данные не создаются некоторыми реквизитами, которые преобразуются/фильтруются в компоненте myelement. Если мне не нужно переместить этот Logik в родительский компонент. Тогда я мог проверить этот реквизит. –

ответ

1
var description, title; 

if (this.props.description) { 
    description = <Description description={this.props.description} />; 

    if (this.props.title) { 
     title = <Title title={this.props.title} />; 
    } 
} 

<div> 
    {title} 
    {description} 
</div> 

Или просто:

render() { 
    const { description, title } = this.props; 

    return (
    <div> 
     {title && description && <Title title={title} />} 
     {description && <Description description={description} />;} 
    </div> 
); 
} 

Имо это лучшая практика, что если ваш элемент описания не требуется, то он не отображается, а не возвращать нуль в его визуализации. Поскольку вы, вероятно, отправляете данные через опору. Точно так же, если вы вообще не хотите отображать этот компонент, это должно произойти в родительском.

+1

Итак, единственное решение состоит в том, чтобы переместить логику преобразования/фильтрации данных в элемент в родительский и проверить на этом vars? –

+1

Yup; как я понимаю, это очень преднамеренно является частью схемы рендеринга сверху вниз. – machineghost