Reactで要素を表示・非表示にするベストプラクティス
Reactで要素を表示・非表示にする方法
条件付きレンダリングは、条件によって要素を表示・非表示にする最も一般的な方法です。
const MyComponent = () => {
const [isVisible, setIsVisible] = useState(true);
return (
<div>
{isVisible && <p>This element is visible</p>}
</div>
);
};
この例では、isVisible
という状態変数を使って要素の表示・非表示を制御しています。isVisible
が true
の場合のみ、p
要素が表示されます。
display
プロパティを使って、要素のスタイルを none
に設定することで、要素を非表示にすることができます。
const MyComponent = () => {
const [isVisible, setIsVisible] = useState(true);
const style = {
display: isVisible ? 'block' : 'none',
};
return (
<div>
<p style={style}>This element is visible</p>
</div>
);
};
この例では、style
オブジェクトを使って display
プロパティを設定しています。isVisible
が true
の場合、display
プロパティは block
に設定され、要素が表示されます。isVisible
が false
の場合、display
プロパティは none
に設定され、要素は非表示になります。
className
プロパティを使って、要素にクラス名を設定することで、要素の表示・非表示を制御することができます。
const MyComponent = () => {
const [isVisible, setIsVisible] = useState(true);
const className = isVisible ? 'visible' : 'hidden';
return (
<div>
<p className={className}>This element is visible</p>
</div>
);
};
この例では、className
プロパティを使って visible
または hidden
というクラス名を設定しています。isVisible
が true
の場合、visible
クラス名が設定され、要素が表示されます。isVisible
が false
の場合、hidden
クラス名が設定され、要素は非表示になります。
ライブラリの使用
react-show
や react-visibility
などのライブラリを使うと、要素の表示・非表示をより簡単に制御することができます。
import React from 'react';
import { Show } from 'react-show';
const MyComponent = () => {
const [isVisible, setIsVisible] = useState(true);
return (
<div>
<Show when={isVisible}>
<p>This element is visible</p>
</Show>
</div>
);
};
この例では、react-show
ライブラリを使って要素の表示・非表示を制御しています。when
プロパティに isVisible
を設定することで、isVisible
が true
の場合のみ、p
要素が表示されます。
Reactで要素を表示・非表示にする方法はいくつかあります。それぞれの方法にはメリットとデメリットがあるので、状況に合わせて最適な方法を選択する必要があります。
import React from 'react';
const MyComponent = () => {
const [isVisible, setIsVisible] = useState(true);
// 条件付きレンダリング
const conditionalRender = () => {
if (isVisible) {
return <p>This element is visible</p>;
} else {
return null;
}
};
// `display` プロパティ
const displayStyle = {
display: isVisible ? 'block' : 'none',
};
// `className` プロパティ
const className = isVisible ? 'visible' : 'hidden';
return (
<div>
{/* 条件付きレンダリング */}
{conditionalRender()}
{/* `display` プロパティ */}
<p style={displayStyle}>This element is visible</p>
{/* `className` プロパティ */}
<p className={className}>This element is visible</p>
{/* ライブラリの使用 (react-show) */}
<Show when={isVisible}>
<p>This element is visible</p>
</Show>
{/* ライブラリの使用 (react-visibility) */}
<VisibilitySensor>
{({ isVisible }) => (
<p style={{ display: isVisible ? 'block' : 'none' }}>
This element is visible
</p>
)}
</VisibilitySensor>
</div>
);
};
export default MyComponent;
このコードを実行すると、4つの方法で要素を表示・非表示にすることができます。
- 条件付きレンダリング:
if
文を使って、条件によって要素を表示・非表示にします。 - display プロパティ:
display
プロパティを使って、要素のスタイルをnone
に設定して非表示にします。 - className プロパティ:
className
プロパティを使って、要素にクラス名を設定して非表示にします。
上記のサンプルコードを参考に、状況に合わせて最適な方法で要素を表示・非表示にしてください。
Reactで要素を表示・非表示にするその他の方法
Fragment
を使って、複数の要素をまとめて表示・非表示にすることができます。
const MyComponent = () => {
const [isVisible, setIsVisible] = useState(true);
return (
<div>
{isVisible && (
<>
<p>This element is visible</p>
<p>This element is also visible</p>
</>
)}
</div>
);
};
この例では、Fragment
を使って p
要素をまとめています。isVisible
が true
の場合のみ、Fragment
内の要素が表示されます。
ポータルを使って、要素を別の場所にレンダリングすることができます。
import React from 'react';
import ReactDOM from 'react-dom';
const MyComponent = () => {
const [isVisible, setIsVisible] = useState(true);
const portal = ReactDOM.createPortal(
<p>This element is visible</p>,
document.getElementById('portal-root')
);
return (
<div>
{isVisible && portal}
</div>
);
};
この例では、ReactDOM.createPortal
を使って p
要素を portal-root
という ID の要素にレンダリングしています。isVisible
が true
の場合のみ、p
要素が表示されます。
高階コンポーネントを使って、要素の表示・非表示を制御するロジックを再利用することができます。
const withVisibility = (Component) => {
return (props) => {
const [isVisible, setIsVisible] = useState(true);
return (
<div>
{isVisible && <Component {...props} />}
</div>
);
};
};
const MyComponent = () => {
return <p>This element is visible</p>;
};
const VisibleComponent = withVisibility(MyComponent);
export default VisibleComponent;
この例では、withVisibility
という高階コンポーネントを作成して、要素の表示・非表示を制御するロジックを再利用しています。VisibleComponent
は MyComponent
をラップして、withVisibility
で定義されたロジックを使用します。
javascript reactjs