Skip to content

Instantly share code, notes, and snippets.

@khusamov
Last active January 20, 2020 11:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save khusamov/aaf093a979980b6506fe4e2e49d1840b to your computer and use it in GitHub Desktop.
Save khusamov/aaf093a979980b6506fe4e2e49d1840b to your computer and use it in GitHub Desktop.
Условный рендеринг для функциональных компонент
function Mailbox(props) {
const unreadMessages = props.unreadMessages;
return (
<div>
<h1>Здравствуйте!</h1>
{renderIf(unreadMessages.length > 0, (
<h2>
У вас {unreadMessages.length} непрочитанных сообщений.
</h2>
)}
</div>
);
}
const messages = ['React', 'Re: React', 'Re:Re: React'];
ReactDOM.render(
<Mailbox unreadMessages={messages} />,
document.getElementById('root')
);
import {ReactElement} from 'react';
/**
* Условный рендеринг для функциональных компонент.
* В функциональных компонентах не прокатывает паттерн условного рендеринга с применением логического оператора &&,
* потому что в типизации описано, что функциональный компонент может возвращать ReactElement или null,
* а логические значения возвращать нельзя.
* @link https://ru.reactjs.org/docs/conditional-rendering.html#inline-if-with-logical--operator
* @param condition
* @param children
*/
export default function renderIf(condition: boolean | Array<any>, children: ReactElement): ReactElement | null {
return (Array.isArray(condition) ? condition.length > 0 : condition) ? children : null;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment