Reactで条件によって表示内容を切り替える方法をメモ。
サンプルコード
例として、一覧表示をレイアウト切り替えボタンでリストとカードに切り替えられる想定を試してみます。
まずはLayout.jsxです。
import { useState } from 'react'
import List from './List.jsx'
function Layout() {
const [layoutType, setLayoutType] = useState('list');
function handleLayoutClick() {
if(layoutType === 'list') {
setLayoutType('card');
} else {
setLayoutType('list');
}
}
return (
<>
<button onClick={handleLayoutClick}>レイアウト切り替え</button>
<List layoutType={layoutType} />
</>
)
}
export default Layout
ボタンとListのコンポーネントを配置して、ボタンをクリックするとlayoutTypeの中身をlistとcardで切り替えるようにしています。
次にList.jsxで、propsから渡ってきたlayoutTypeの値に応じて出し分けを行います。
function List({ layoutType }) {
if(layoutType === 'list') {
return <p>list</p>;
} else {
return <p>card</p>;
}
}
export default List
これでボタンクリック(条件の切り替え)に応じて表示を切り替えることができました。
if文で表示切替のデモページ
nullを返すことで、何も表示しないようにすることもできます。
例として、初期表示は何も表示しないようにしてみます。
import { useState } from 'react'
import List from './List.jsx'
function Layout() {
const [layoutType, setLayoutType] = useState('none');
function handleLayoutClick() {
if(layoutType === 'none') {
setLayoutType('list');
} else if(layoutType === 'list') {
setLayoutType('card');
} else {
setLayoutType('list');
}
}
return (
<>
<button onClick={handleLayoutClick}>レイアウト切り替え</button>
<List layoutType={layoutType} />
</>
)
}
export default Layout
初期表示時はlayoutTypeをnoneとなるようにしました。
次にList.jsxで、layoutTypeがnoneの場合にはnullを返すようにしてみます。
function List({ layoutType }) {
if(layoutType === 'none') {
return null;
} else if(layoutType === 'list') {
return <p>list</p>;
} else {
return <p>card</p>;
}
}
export default List
これで初期表示時は何も表示しないようにできました。
nullを返す場合のデモページ
最後に、三項演算子を使って切り替える形を試してみます。
Layout.jsxは最初と同じ状態です。
import { useState } from 'react'
import List from './List.jsx'
function Layout() {
const [layoutType, setLayoutType] = useState('list');
function handleLayoutClick() {
if(layoutType === 'list') {
setLayoutType('card');
} else {
setLayoutType('list');
}
}
return (
<>
<button onClick={handleLayoutClick}>レイアウト切り替え</button>
<List layoutType={layoutType} />
</>
)
}
export default Layout
List.jsx内で三項演算子を使って条件分岐を行います。
function List({ layoutType }) {
return (
<>
{layoutType === 'list' ? <p>list</p> : <p>card</p>}
</>
)
}
export default List
結果としては最初のデモと同じ動作になります。
三項演算子を使う場合のデモページ
コメントが承認されるまで時間がかかります。