我需要在 React 中,讓側邊欄在大螢幕上呈現一種樣式,而在較小螢幕上呈現另一種樣式,所以我希望能夠在 JSX 中偵測到響應式佈局的變化。

就像這樣:

您可以使用 react-responsive 套件來實現這一點。

npm install react-responsive

然後您可以引入 useMediaQuery 鉤子:

import { useMediaQuery } from 'react-responsive'

在您的組件中,您可以像這樣使用它:

 const isBigScreen = useMediaQuery({ query: '(min-device-width: 1224px)' })
 const isSmallScreen = useMediaQuery({ query: '(max-width: 1224px)' })

這是我在組件主頁上找到的一個簡單的斷點示例,對於我的需求來說效果很好。

我在一個佈局組件中以以下方式使用它:

import { useMediaQuery } from 'react-responsive'

export default function Layout({ children }) {
 const isBigScreen = useMediaQuery({ query: '(min-device-width: 1224px)' })
 const isSmallScreen = useMediaQuery({ query: '(max-width: 1224px)' })

 return (
 <div>
 {isSmallScreen ? (
 <LeftSidebar small={true} />
 ) : (
 <LeftSidebar />
 )}
 </div>
 )
}

我使用它來傳遞一個 small 屬性給 LeftSidebar 組件,以便它知道如何渲染自己。

您也可以使用不同的方式來創建包裝 JSX 的組件,我認為這樣看起來更好:

import { useMediaQuery } from 'react-responsive'

const BigScreen = ({ children }) => {
 return useMediaQuery({ minWidth: 992 }) ? children : null
}

const SmallScreen = ({ children }) => {
 return useMediaQuery({ maxWidth: 991 }) ? children : null
}

export default function Layout({ children }) {
 return (
 <div>
 <SmallScreen>
 <LeftSidebar small={true} />
 </SmallScreen>
 <BigScreen>
 <LeftSidebar />
 </BigScreen>
 </div>
 </div>
 )
}