tgoop.com/react_tg/467
Create:
Last Update:
Last Update:
window.matchMedia
:
const isMobile = window.matchMedia("(max-width: 768px)").matches;
ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅
isMobile
ΠΏΡΠΈΠΌΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ true
Π΄Π»Ρ ΡΠΊΡΠ°Π½ΠΎΠ² ΡΠΈΡΠΈΠ½ΠΎΠΉ ΠΌΠ΅Π½ΡΡΠ΅ 768px
β ΡΡΠΎ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΡ
ΡΡΡΡΠΎΠΉΡΡΠ². ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ max-width
ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ Π²Π°ΡΠΈΠΌ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌ ΠΊ Π°Π΄Π°ΠΏΡΠΈΠ²Π½ΠΎΡΡΠΈ. Π Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ isMobile
ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π½Π°Π»Π°Π΄ΠΈΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΡΠΊΡΠ°Π½Π°.import React, { useState, useEffect } from 'react';
// Π₯ΡΠΊ useDeviceDetect Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΈΠΏΠ° ΡΡΡΡΠΎΠΉΡΡΠ²Π°
const useDeviceDetect = () => {
const [isMobile, setIsMobile] = useState(window.innerWidth < 768);
useEffect(() => {
// ΠΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΡΠΊΡΠ°Π½Π° Π·Π΄Π΅ΡΡ
const handleResize = () => setIsMobile(window.innerWidth < 768);
window.addEventListener('resize', handleResize);
// ΡΠ΄Π°Π»ΡΠ΅ΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ ΡΡΠ΅ΡΠΊΡ ΠΏΠ°ΠΌΡΡΠΈ
return () => window.removeEventListener('resize', handleResize);
}, []);
return { isMobile };
};
export default useDeviceDetect;
useDeviceDetect
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠΈΡΠΈΠ½Ρ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³:import React from 'react';
import useDeviceDetect from './useDeviceDetect';
const MyResponsiveComponent = () => {
const { isMobile } = useDeviceDetect();
return (
<div>
{
// ΠΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΠΌ ΠΈ Π΄Π΅ΡΠΊΡΠΎΠΏΠ½ΡΠΌ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΈΠΏΠ° ΡΡΡΡΠΎΠΉΡΡΠ²Π°
isMobile ? <MobileComponent /> : <DesktopComponent />
}
</div>
);
};
export default MyResponsiveComponent;
@react_tg