當react專案中,你需要透過判斷當前螢幕寬度改變,對不同寬度斷點進行不同的處理,例如,當螢幕寬度縮小至768px及以下時,需要將某一個屬性值改變,或者是當螢幕寬度縮小或者放大到某一寬度時,需要呼叫某個方法
使用window.matchMedia()
監聽媒體查詢
import React, { useEffect } from 'react';
function ResponsiveComponent() {
useEffect(() => {
// 定義不同的媒體查詢
const smallScreen = window.matchMedia('(max-width: 600px)');
const mediumScreen = window.matchMedia('(min-width: 601px) and (max-width: 992px)');
const largeScreen = window.matchMedia('(min-width: 993px) and (max-width: 1200px)');
const xlScreen = window.matchMedia('(min-width: 1201px) and (max-width: 1536px)');
const xxlScreen = window.matchMedia('(min-width: 1537px)');
// 定義響應不同螢幕大小的方法
const handleSmallScreen = () => {
console.log('Small screen');
// 呼叫適合小螢幕的方法
};
const handleMediumScreen = () => {
console.log('Medium screen');
// 呼叫適合中螢幕的方法
};
const handleLargeScreen = () => {
console.log('Large screen');
// 呼叫適合大螢幕的方法
};
const handleXlScreen = () => {
console.log('XL screen');
// 呼叫適合XL螢幕的方法
};
const handleXxlScreen = () => {
console.log('XXL screen');
// 呼叫適合XXL螢幕的方法
};
// 監聽變化
smallScreen.addListener(handleSmallScreen);
mediumScreen.addListener(handleMediumScreen);
largeScreen.addListener(handleLargeScreen);
xlScreen.addListener(handleXlScreen);
xxlScreen.addListener(handleXxlScreen);
// 初始呼叫
smallScreen.matches ? handleSmallScreen() : null;
mediumScreen.matches ? handleMediumScreen() : null;
largeScreen.matches ? handleLargeScreen() : null;
xlScreen.matches ? handleXlScreen() : null;
xxlScreen.matches ? handleXxlScreen() : null;
// 清理
return () => {
smallScreen.removeListener(handleSmallScreen);
mediumScreen.removeListener(handleMediumScreen);
largeScreen.removeListener(handleLargeScreen);
xlScreen.removeListener(handleXlScreen);
xxlScreen.removeListener(handleXxlScreen);
};
}, []);
return (
<div>
{/* 你的內容 */}
</div>
);
}
export default ResponsiveComponent;
注意
useEffect
中的清理函式確保了當元件解除安裝時,所有的事件監聽器都會被移除,避免記憶體洩漏。- 你可以根據需要調整媒體查詢的斷點值,以匹配你的設計或Tailwind CSS的斷點設定。
- 這種方式不僅限於呼叫
console.log
,你可以在其中執行任何你需要的JavaScript程式碼,比如更新狀態、傳送資料到伺服器等。