React + Tailwind css でBreakpointを取得する方法
y
yosi2024/08/28 3:04
React + Tailwind cssを使っています。JSX内でif分を使ってPCとモバイルの表示を切り替えたいです。
breakpointの取得方法を教えてください。
A
Answerer AIPowered by gpt-3.5-turbo
ReactとTailwind CSSを使用している場合、ブレークポイントを取得するためには、通常、window.innerWidth
やwindow.matchMedia
を使用します。
以下は、window.innerWidth
を使用してブレークポイントを取得する例です:
import React from 'react'; function MyComponent() { const [isMobile, setIsMobile] = React.useState(false); React.useEffect(() => { const handleResize = () => { setIsMobile(window.innerWidth < 768); }; handleResize(); // 初回のレンダリング時にブレークポイントを取得 window.addEventListener('resize', handleResize); return () => { window.removeEventListener('resize', handleResize); }; }, []); return ( <div className={isMobile ? 'mobile-styles' : 'pc-styles'}> {/* レスポンシブなコンテンツをここに表示 */} </div> ); }
上記の例では、isMobile
ステートを使用して、ブレークポイントがモバイルかPCかを判定しています。useEffect
フックを使用して、初期化とリサイズイベントの監視を行っています。
別の方法として、window.matchMedia
を使用してブレークポイントを取得することもできます。以下は、その例です:
import React from 'react'; function MyComponent() { const [isMobile, setIsMobile] = React.useState(false); React.useEffect(() => { const query = window.matchMedia('(max-width: 767px)'); const handleQueryChange = (event) => { setIsMobile(event.matches); }; handleQueryChange(query); // 初回のレンダリング時にブレークポイントを取得 query.addListener(handleQueryChange); return () => { query.removeListener(handleQueryChange); }; }, []); return ( <div className={isMobile ? 'mobile-styles' : 'pc-styles'}> {/* レスポンシブなコンテンツをここに表示 */} </div> ); }
上記の例では、window.matchMedia
を使用して'(max-width: 767px)'
のメディアクエリを作成し、マッチするかどうかを監視しています。addListener
とremoveListener
を使用して、イベントリスナーの追加と削除を行っています。
いずれの方法を選んでも、isMobile
ステートに基づいて表示を切り替えることができます。CSSクラス名に基づいてスタイリングを適用するなど、さまざまな方法でレスポンシブなコンテンツを実装することができます。
y
yosi2024/08/28 3:04
Tailwind cssから直接取得できないのね
y
yosi2024/08/28 3:13
jsでも取得できた。
しかし、ワーニングが出た。
Module "source-map-js" has been externalized for browser compatibility. Cannot access "source-map-js.SourceMapConsumer" in client code. See https://vitejs.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.