【发布时间】:2021-01-15 14:21:58
【问题描述】:
使用 React,我有一个固定的导航购物车图标,该图标会在滚动时更改,并带有指向购物车页面/组件的链接。每当我单击该图标时,它都会导航到该页面,但片刻后会出现错误-TypeError:无法读取null的属性'classList'。购物车页面只有一个“开发中...”的 div,没有样式。
我找到了问题的症结所在; UseEffect 中的 getNumbers() redux 函数,它只是在添加项目时增加图标中的购物车数量。如果我将此功能注释掉,错误就会消失。在单独的 useEffect 中尝试了该功能,但没有成功。
我不明白为什么购物车页面会解析来自单独组件的图标,更不用说如何在不恢复到类的情况下解决这个问题。
有人知道解决办法吗?
const Homepage = (props) => {
console.log(props);
useEffect(() => {
window.addEventListener("scroll", () => {
const isTop = window.scrollY > 700;
const fixed = document.getElementById("fixed");
if (isTop) {
fixed.classList.remove("disappear");
} else {
fixed.classList.add("disappear");
}
});
getNumbers();
}, []);
return (
<div className='Homepage'>
<div className='Homepage-nav' id='fixed'>
<Link to='/basket'>
<i className='fas fa-shopping-cart'>
<span
style={{
fontSize: "1rem",
paddingLeft: ".25rem"
}}
>
{props.basketProps.basketNumbers}
</span>
</i>
</Link>
</div>
<Hero />
<Shop />
<Footer />
</div>
);
};
const mapStateToProps = (state) => ({
basketProps: state.basketState
});
export default connect(
mapStateToProps,
{ getNumbers }
)(Homepage);
【问题讨论】:
-
你没有正确“反应”;
isTop应该是组件状态的一部分,并且在您的 JSX 中,应该根据其值动态添加该类。 (错误是由您的fixed.classList行引起的,当fixed为空时运行)
标签: javascript reactjs use-effect