Как проверить, будет ли элемент React отображать что-либо - PullRequest
4 голосов
/ 30 сентября 2019

Скажем, я делаю компонент-обертку, который должен отображаться сам, только если передаются некоторые дочерние узлы:

const Wrapper = ({children}) => {
  if (!children) return null
  return <div>{children}</div>
}

Проблема в том, что children может быть Fragment, содержащим ноль, илимассив нулей. Или фрагмент, содержащий фрагмент, содержащий ...

<Wrapper>hey</Wrapper> // renders <div>hey</div> ?
<Wrapper>{null}</Wrapper> // renders nothing ?
<Wrapper>{[null]}</Wrapper> // renders <div/> ?
<Wrapper><React.Fragment>{null}</React.Fragment></Wrapper> // renders <div/> ?

Есть ли канонический способ проверить все эти условия?

Ответы [ 2 ]

1 голос
/ 30 сентября 2019

Может быть, это то, что вы ищете:

import ReactDOMServer from 'react-dom/server';

const Wrapper = ({children}) => {
  const markup = ReactDOMServer.renderToStaticMarkup(children);
  if (!markup.trim()) return null;

  return <div>{children}</div>
}
1 голос
/ 30 сентября 2019

Не нужно проверять. Они просто не отображают .

false, null, undefined и true являются допустимыми дочерними элементами. Они просто не рендерится. Все эти выражения JSX будут отображаться одинаково:

<div />

<div></div>

<div>{false}</div>

<div>{null}</div>

<div>{undefined}</div>

<div>{true}</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...