项目显示何时应该隐藏
Item showing when it should be hidden
我正在创建一个 bootstrap 导航,其中的导航菜单项是隐藏的,直到您滚动到 device/desktop 浏览器视口的全高。它们在初始页面加载时显示,但一旦您滚动,它们就会隐藏,然后在滚动后重新出现。
它通过添加隐藏和显示来控制类。但是,隐藏 类 是在页面加载时添加的。
知道如何防止在 refresh/initial 页面加载时添加 类 吗?
导航:
import React from 'react';
import { Collapse, Navbar, NavbarToggler, NavbarBrand, Nav, NavItem, NavLink } from 'reactstrap';
export default class Example extends React.Component {
constructor(props) {
super(props);
this.toggle = this.toggle.bind(this);
this.state = {
isOpen: false,
width: 0,
height: 0
};
this.updateWindowDimensions = this.updateWindowDimensions.bind(this);
}
toggle() {
this.setState({
isOpen: !this.state.isOpen
});
}
state = {
isTop: true,
};
componentDidMount() {
this.updateWindowDimensions();
window.addEventListener('resize', this.updateWindowDimensions);
document.addEventListener('scroll', () => {
const isTop = window.scrollY < window.innerHeight;
if (isTop !== this.state.isTop) {
this.setState({ isTop })
}
});
}
componentWillUnmount() {
window.removeEventListener('resize', this.updateWindowDimensions);
}
updateWindowDimensions() {
this.setState({ width: window.innerWidth, height: window.innerHeight });
}
render() {
return (
<div>
<Navbar color="light" light expand="md">
<NavbarBrand href="/">Maryland <span>Brand</span></NavbarBrand>
<NavbarToggler onClick={this.toggle} />
<Collapse isOpen={this.state.isOpen} navbar>
<Nav className="ml-auto" navbar>
<NavItem className={this.state.isTop ? 'hide' : 'show fadeIn'}>
<NavLink className="active" href="/">Our Brand</NavLink>
</NavItem>
<NavItem className={this.state.isTop ? 'hide' : 'show fadeIn'}>
<NavLink href="/">Logos</NavLink>
</NavItem>
<NavItem className={this.state.isTop ? 'hide' : 'show fadeIn'}>
<NavLink href="/">Color</NavLink>
</NavItem>
<NavItem className={this.state.isTop ? 'hide' : 'show fadeIn'}>
<NavLink href="/">Typography</NavLink>
</NavItem>
<NavItem className={this.state.isTop ? 'hide' : 'show fadeIn'}>
<NavLink href="/">Imagery</NavLink>
</NavItem>
<NavItem className={this.state.isTop ? 'hide' : 'show fadeIn'}>
<NavLink href="/">Editorial</NavLink>
</NavItem>
<NavItem>
<NavLink className="red bold uppercase show" href="/">Communicators Toolkit</NavLink>
</NavItem>
</Nav>
</Collapse>
</Navbar>
</div>
);
}
}
这里的问题是 state
被初始化了两次。一次作为 class 字段和构造函数中的其他字段。
构造函数中的一个优先于另一个,因为那里缺少 isTop
,它最终是 undefined
将 isTop
初始化移动到构造函数中:
this.state = {
isOpen: false,
width: 0,
isTop: true,
height: 0
};
并且导航栏应该默认隐藏
我正在创建一个 bootstrap 导航,其中的导航菜单项是隐藏的,直到您滚动到 device/desktop 浏览器视口的全高。它们在初始页面加载时显示,但一旦您滚动,它们就会隐藏,然后在滚动后重新出现。
它通过添加隐藏和显示来控制类。但是,隐藏 类 是在页面加载时添加的。
知道如何防止在 refresh/initial 页面加载时添加 类 吗?
导航:
import React from 'react';
import { Collapse, Navbar, NavbarToggler, NavbarBrand, Nav, NavItem, NavLink } from 'reactstrap';
export default class Example extends React.Component {
constructor(props) {
super(props);
this.toggle = this.toggle.bind(this);
this.state = {
isOpen: false,
width: 0,
height: 0
};
this.updateWindowDimensions = this.updateWindowDimensions.bind(this);
}
toggle() {
this.setState({
isOpen: !this.state.isOpen
});
}
state = {
isTop: true,
};
componentDidMount() {
this.updateWindowDimensions();
window.addEventListener('resize', this.updateWindowDimensions);
document.addEventListener('scroll', () => {
const isTop = window.scrollY < window.innerHeight;
if (isTop !== this.state.isTop) {
this.setState({ isTop })
}
});
}
componentWillUnmount() {
window.removeEventListener('resize', this.updateWindowDimensions);
}
updateWindowDimensions() {
this.setState({ width: window.innerWidth, height: window.innerHeight });
}
render() {
return (
<div>
<Navbar color="light" light expand="md">
<NavbarBrand href="/">Maryland <span>Brand</span></NavbarBrand>
<NavbarToggler onClick={this.toggle} />
<Collapse isOpen={this.state.isOpen} navbar>
<Nav className="ml-auto" navbar>
<NavItem className={this.state.isTop ? 'hide' : 'show fadeIn'}>
<NavLink className="active" href="/">Our Brand</NavLink>
</NavItem>
<NavItem className={this.state.isTop ? 'hide' : 'show fadeIn'}>
<NavLink href="/">Logos</NavLink>
</NavItem>
<NavItem className={this.state.isTop ? 'hide' : 'show fadeIn'}>
<NavLink href="/">Color</NavLink>
</NavItem>
<NavItem className={this.state.isTop ? 'hide' : 'show fadeIn'}>
<NavLink href="/">Typography</NavLink>
</NavItem>
<NavItem className={this.state.isTop ? 'hide' : 'show fadeIn'}>
<NavLink href="/">Imagery</NavLink>
</NavItem>
<NavItem className={this.state.isTop ? 'hide' : 'show fadeIn'}>
<NavLink href="/">Editorial</NavLink>
</NavItem>
<NavItem>
<NavLink className="red bold uppercase show" href="/">Communicators Toolkit</NavLink>
</NavItem>
</Nav>
</Collapse>
</Navbar>
</div>
);
}
}
这里的问题是 state
被初始化了两次。一次作为 class 字段和构造函数中的其他字段。
构造函数中的一个优先于另一个,因为那里缺少 isTop
,它最终是 undefined
将 isTop
初始化移动到构造函数中:
this.state = {
isOpen: false,
width: 0,
isTop: true,
height: 0
};
并且导航栏应该默认隐藏