javascript - 功能组件仅在部署后渲染两次
问题描述
我有根据窗口宽度呈现 Slider 的功能组件:
const Works = (props) => {
const size = useWindowWidth()
const codeWorksArray = CodeWorksQuery()
const mapWorksArray = MapWorksMetadata()
const setSliderItems = (width) => {
if (width > config.deviceWidths.medium) {
return 4
} else if (width >= config.deviceWidths.small) {
return 2
} else {
return 1
}
}
...
<Slider sliderElements={mapWorksSliderItems} slidesCount={setSliderItems(size.width)}/>
useWindowWidth()
是一个获取窗口尺寸并处理调整大小监听器的钩子:
import { useState, useEffect } from "react"
const useWindowWidth = () => {
const isWindowAvailable = typeof window !== "undefined"
const getSize = () => {
return {
width: isWindowAvailable ? window.innerWidth : undefined,
height: isWindowAvailable ? window.innerHeight : undefined
};
}
const [windowSize, setWindowSize] = useState(getSize)
useEffect(() => {
if (!isWindowAvailable) {
return false
}
const handleResize = () => {
setWindowSize(getSize())
}
window.addEventListener("resize", handleResize)
return () => window.removeEventListener("resize", handleResize)
}, [])
return windowSize
}
export default useWindowWidth
slidesCount
value 作为 props 传递给Slider
,并计算组件内每个滑块项的宽度。问题是一旦部署滑块只有一个元素(而不是桌面上的 4 个)。似乎只有在调整大小后才会更新。
在本地主机上这工作正常。在部署 (Netlify) 之后,此组件会渲染两次,但在第二次渲染后,它会保留第一次渲染的信息。是什么导致 localhost 和部署后的外观不同?
解决方案
推荐阅读
- android - 使用 ScrollingMovementMethod 检测 TextView 的结束
- ios - MessageKit 通过 pods 会导致 iOS 应用程序崩溃
- php - 致命错误:未找到特征“App\Comenter”
- node.js - 如何在nodejs中启用cors
- react-native - FlatList Mobx ReactNative 缺少计算选项:get
- bash - 虽然循环不循环通过主机列表中的 ssh 连接
- ruby-on-rails - Docker无法启动rails
- apache - 创建 docker 容器来托管网站
- c# - 需要在查询时将存储在 SQL Server 中的 (x,y) 点作为二进制图像转换为浮点数组
- phpstorm - 是否可以在不指定类型的情况下为 @param 编写 PHPDoc 文档?