![](/img/trans.png)
[英]How to update webpack config for a react project created using create-react-app?
[英]How to write JS which working on single page of react router at project created create-react-app
我正在处理一个单页反应项目。 我想在我的一个页面(产品页面)上隐藏 header。 我在我的向下滑动组件中为此编写了下面的代码,该组件放置在我想隐藏 header 的页面上。 但是当我加载产品页面时,代码也可以在其他页面上运行。 我的向下滑动组件放置在产品页面,我在其他页面遇到此错误: TypeError: Cannot read property 'style' of null
有关于这个问题的gif:
图片链接: https://imgur.com/YP43PbO
直接链接: https://i.imgur.com/YP43PbO.gifv
useEffect(() => { let prevScrollpos = window.pageYOffset; window.onscroll = function() { let currentScrollPos = window.pageYOffset; let headerH = document.getElementById("header").clientHeight if (prevScrollpos > currentScrollPos) { document.getElementById("header").style.top = "0"; document.getElementById("slide-down").style.top = `${headerH}px`; } else { document.getElementById("header").style.top = `-${headerH}px`; document.getElementById("slide-down").style.top = "0"; } prevScrollpos = currentScrollPos; } })
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
只有当该 id 存在时,您才需要执行您的代码。
我想到了两种方法。 第一个是使用“try catch”语句。 另一种是在执行这些命令之前检查 id 是否存在。
请注意,我同意第二种解决方案
useEffect(() => {
let prevScrollpos = window.pageYOffset;
window.onscroll = function () {
try {
let currentScrollPos = window.pageYOffset;
let headerH = document.getElementById("header").clientHeight
if (prevScrollpos > currentScrollPos) {
document.getElementById("header").style.top = "0";
document.getElementById("slide-down").style.top = `${headerH}px`;
} else {
document.getElementById("header").style.top = `-${headerH}px`;
document.getElementById("slide-down").style.top = "0";
}
prevScrollpos = currentScrollPos;
} catch (e) {
//do nothing or log "e" to console ( console.log(e) )
}
}
})
请记住为
document.getElementById("header")
和document.getElementById("slide-down")
创建一个变量,而不是重复几次(就像我在第二个解决方案中所做的那样)。 这样做将提高您的应用程序的性能
useEffect(() => {
let prevScrollpos = window.pageYOffset;
let header = getElementById("header"),
slide_down = getElementById("slide-down");
if (header && slide_down) {
window.onscroll = function () {
let currentScrollPos = window.pageYOffset;
let headerH = header.clientHeight
if (prevScrollpos > currentScrollPos) {
header.style.top = "0";
slide_down.style.top = `${headerH}px`;
} else {
header.style.top = `-${headerH}px`;
slide_down.style.top = "0";
}
prevScrollpos = currentScrollPos;
}
}
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.