我有以下React组件:
export default class AdminHomePage extends Component {
render() {
return (
<div>
<NavBar />
<OptionsMenu />
<Form /> // needs to be inittially hidden
<ImportFile /> // needs to be inittially hidden
<Footer />
</div>
);
}
}
在我的 OptionsMenu 组件中,我有两个按钮:
export default class OptionsMenu extends Component {
render() {
return (
<div className="admin-menu">
<div className="admin-menu-header">Select an option</div>
<div className="buttons-admin-menu">
<button className="button-admin">
Register
</button>
<button className="button-admin" onClick={getFileModel}>
Import CSV file
</button>
</div>
</div>
);
}
}
首先,我需要同时隐藏 Form 和 ImportFile 组件,因此,当我单击内的“ Import CSV”按钮时OptionsMenu 文件,显示 ImportFile 组件,单击“注册”按钮时,显示 Form 组件。
我只发现了一些主题,这些主题显示了如何隐藏/显示在同一文件/类中具有各自按钮的组件,因此我不知道如何处理不同类上的按钮和组件。
谢谢。
答案 0 :(得分:2)
您需要在父组件中创建一个记录状态(确定可见性的状态)的方法,并将该方法作为道具传递:
export default class AdminHomePage extends Component {
constructor(props) {
super(props);
this.state = {
isVisible: false
}
this.isElVisible = this.isElVisible.bind(this);
}
isElVisible() {
this.setState({isVisible: !isVisible});
}
render() {
return (
<div>
<NavBar />
<OptionsMenu isViz={this.isElVisible} />
<Form /> // needs to be inittially hidden
{ this.state.isVisible? <ImportFile /> : '' } // needs to be inittially hidden
<Footer />
</div>
);
}
}
然后,在props.isViz
组件,onClick或任何希望其可见的地方调用OptionsMenu
。
答案 1 :(得分:0)
我能够解决创建函数的问题,然后将该函数作为道具发送给OptionsMenu组件(类似于@silencedogood所说的,但他的回答有一些问题)。
组件 AdminHomePage :
export default class AdminHomePage extends Component {
constructor(props) {
super(props);
this.handleFormClick = this.handleFormClick.bind(this);
this.handleImportClick = this.handleImportClick.bind(this);
this.state = {
formVisible: false,
importVisible: false,
};
}
handleFormClick() {
this.setState({
formVisible: true,
importVisible: false,
});
}
handleImportClick() {
this.setState({
formVisible: false,
importVisible: true,
});
}
render() {
return (
<div>
<NavBar
keycloak={this.props.keycloak}
name={this.props.name}
email={this.props.email}
/>
<OptionsMenu
showForm={this.handleFormClick}
showImport={this.handleImportClick}
/>
{this.state.formVisible ? <Form /> : null}
{this.state.importVisible ? <HomePage /> : null}
<Footer />
</div>
);
}
}
调用组件 AdminHomePage 中的函数:
export default class OptionsMenu extends Component {
render() {
return (
<div className="admin-menu">
<div className="admin-menu-header">Selecione uma opção</div>
<div className="buttons-admin-menu">
<button
className="button-admin"
onClick={() => this.props.showForm()}
>
Register
</button>
<button
className="button-admin"
onClick={() => {
this.props.showImport();
getFileModelo();
}}
>
Import CSV file
</button>
</div>
</div>
);
}
}