我尝试将图表放置在单独的组件中,并通过使用按钮上的handleclick函数来更改其内容(更改按钮的状态)(使用'onclick')
我真的对代码的清晰度不抱有信心,因此我尝试在小提琴中用更简单的方式重现我所做的事情
class hello extends React.Component {
render() {
return (
<h2>hello</h2>
);
}
}
class bye extends React.Component {
render() {
return (
<h2>goodbye</h2>
);
}
}
class Toggle extends React.Component {
constructor(props) {
super(props);
this.state = {isToggleOn: true};
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
this.setState(prevState => ({
isToggleOn: !prevState.isToggleOn
}));
}
render() {
return (
<div>
<div>
{this.state.components[hello]}
</div>
<button onClick={this.handleClick}>
switch
{this.setState({components:[<bye />]})}
</button>
</div>
);
}
}
ReactDOM.render(
<Toggle />,
document.getElementById('root')
);
“ toggle”组件中的div应该在组件“ hello”和“ bye”之间切换
实际上,本应显示的当前部分(“ hello”)将被其他部分(“ bye”)替换,然后单击它们下面的按钮。
提前谢谢。
答案 0 :(得分:1)
为什么不导入所有局部视图并根据条件有条件地渲染它们
{condition & <View1/>
答案 1 :(得分:1)
您的代码中有一些错误。这是一个使用条件渲染实现您想要的功能的示例:
import React, { useState } from "react";
import ReactDOM from "react-dom";
const Hello = () => {
return <h2>hello</h2>;
};
const Bye = () => {
return <h2>bye</h2>;
};
const App = () => {
const [toggled, setToggled] = useState(true);
const handleClick = () => {
setToggled(!toggled);
};
const render = () => {
if (toggled) {
return <Hello />;
}
return <Bye />;
};
return (
<div>
<button onClick={handleClick}>toggle</button>
{render()}
</div>
);
};
ReactDOM.render(<App />, document.getElementById("root"));
答案 2 :(得分:1)
如果只想通过单击按钮在两个组件之间切换,则可以使用条件渲染。
将您的render
方法更改为此:
render(){
return (
<div>
{this.state.isToggleOn?<Hello />:<Bye />}
<button onClick={this.handleClick}>Switch</button>
</div>
}
还请保持组件名称的首字母大写,否则可能会抱怨。并且使用基于Class
的组件已经过时了。 Hooks
现在很热门。因此,尝试使用更多的Functional
组件。
注意:我的答案假设您正在使用babel presets
来转译jsx
和es6
语法。如果不是,请查看@Colin的答案。它还使用钩子。
答案 3 :(得分:1)
有很多方法可以做到:
{ this.state.isToggleOn?<Hello/>:<Bye/> }
render() {
let chart;
if(this.state.isToggleOn) {
chart = <Hello/>;
} else {
chart = <Bye/>;
}
return ( <div> { chart } </div>);
}
3您也可以使用开关盒进行条件渲染。由于条件为真或假,因此此处不太适合。