javascript - 更改样式取决于状态
问题描述
当用户已经登录时,我试图隐藏一个组件
const Container = styled.div`
display: ${(props) => props.loggedIn ? 'none' : 'block'};
`
this.state {
loggedIn: false
}
getUrl = () => {
//conditions to determine if user already loggedIn {
this.setState(prevState => ({
loggedIn: !prevState.loggedIn,
}));
}
componentDidMount() {
this.getUrl()
}
render() {
return (
<SomeComponent>
<Row>
<Col>
<Navbar> Navbar </Navbar>
</Col>
<Col>
<Container>
<SomeStyles>
//somestyles
</SomeStyles>
<Menu>
//MenuList
</Menu>
</Container>
</Col>
<Row>
</SomeComponent>
);
}
}
setState 已经在工作了。但问题是当我试图在样式化组件中传递它时,它只会获得“loggedIn”状态的默认值,它是假的。所以它总是最终得到显示的“块”值。
解决方案
您需要将loggedIn
属性传递给Container
:
// Styled Container
const Container = styled.div`
display: ${(props) => props.loggedIn ? 'none' : 'block'};
`
// Components tree
<SomeComponent>
<Row>
<Col>
<Navbar> Navbar </Navbar>
</Col>
<Col>
<Container loggedIn={this.state.loggedIn}>
<SomeStyles/>
<Menu/>
</Container>
</Col>
</Row>
</SomeComponent>
推荐阅读
- umbraco - 在 Umbraco 中创建非内容页面
- javascript - “加载 gif”背景图像(IE/Edge)的问题
- vba - VBA AutoCAD:从两个给定点绘制折线并遵循特定路径
- python - 在 Python 中为对象中的多个变量赋值
- java - 如何在(单元)测试中使用自动配置的bean,同时在main中手动配置bean?
- php - 如何通过 API (PHP) 更改 Vimeo 的视频隐私?
- excel - 删除不需要的字符
- angular - 使用 Angular 5 获取元素的全宽
- python - Scrapy 错误 302 和代理问题
- angular6 - 如何使用httpservice在gridoption中绑定ag-grid的rowdata