reactjs - show component depending on state
问题描述
I have 2 components that I want to display based on the state. basically when I click the button I want to toggle 2 components. I dont understand why when I click the button nothing changes.
import React, { Component } from 'react';
import { Route, Link, NavLink, Redirect } from 'react-router-dom'
class Header extends Component {
constructor(props) {
super(props);
this.state = {isToggleOn: false};
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
this.setState(prevState => ({
isToggleOn: !prevState.isToggleOn
}));
}
render() {
return(
<header>
{this.state.isToggleOn ? <MenuOpened /> : <MenuClosed />}
</header>
)
}
}
const MenuClosed = () => {
return (
<button onClick={this.handleClick}>
{this.state.isToggleOn ? 'ON' : 'OFF'}
</button>
)
}
const MenuOpened = () => {
return(
<ul>
<li><NavLink to="/page-1" exact>page1</NavLink></li>
<li><NavLink to="/page-2" exact>page2</NavLink></li>
</ul>
)
}
export default Header;
解决方案
您必须将 handleClick 函数和 isToggleOn 状态作为道具传递给 MenuClosed 组件。
{this.state.isToggleOn ? <MenuOpened /> : <MenuClosed handleClick={this.handleClick} isToggleOn={this.state.isToggleOn} />}
接着:
const MenuClosed = ({handleClick, isToggleOn}) => { return ( <button onClick={handleClick}> {isToggleOn ? 'ON' : 'OFF'} </button> ) }
推荐阅读
- ado - ADO Recordset.CacheSize 属性对客户端游标有意义吗?
- vb.net - 以编程方式调用事件
- r - GAMM 模型预测每个时期的相同值
- python - 在面向对象编程中避免重复数据库连接的最佳方法
- git - 来自 Eclipse 的 Git 合并:选择一个 ref 进行合并
- omnet++ - 使用 Adhochost 节点代替 Omnet++ 示例
- node.js - 自动从 MongoDB 服务器创建 Express API
- google-sheets - 谷歌表格:当给定元素在一行中时,如何获得包含 1、2、3 和 4 元素的所有组合(不重复)?
- javascript - 如何防止用户通过浏览器中的“检查元素”观看我服务器上的所有视频
- ruby-on-rails - 错误:没有这样的文件或目录@rb_sysopen - /var/www/ruby/blog/config/webpacker.yml (RuntimeError)