gpt4 book ai didi

javascript - React - 从另一个组件的 onClick 切换一个组件的显示

转载 作者:数据小太阳 更新时间:2023-10-29 06:14:53 25 4
gpt4 key购买 nike

我正在尝试构建我的第一个 React 项目,目前正在将一个汉堡导航按钮和一个在单击导航时出现的菜单放在一起。

我将其分为两个部分;汉堡和 MenuOverlay。两者的代码如下。

目前,我在 Hamburger 上有一个 onClick 可以在其上切换一个类,但是我如何通过该点击来切换菜单?它隐藏在 display: none;默认情况下。可能是一个非常基本的问题,所以很抱歉 - 仍在努力让我了解 React。

菜单覆盖

import React from 'react';
import { Link } from 'react-router';

const MenuOverlay = () => {
return (
<div className="menuOverlay">
<div className="innerMenu">
<p><Link to="/">Home</Link></p>
<p><Link to="/">About</Link></p>
<p><Link to="/">Contact</Link></p>
</div>
</div>
);
};

export default MenuOverlay;

汉堡包

import React, { Component } from 'react';

class Hamburger extends Component {
constructor(props) {
super(props);

this.state = { active: '' };
this.handleClick = this.handleClick.bind(this);
}

handleClick() {
var toggle = this.state.active === 'is-active' ? '' : 'is-active';
this.setState({active: toggle});
}

render() {

return (
<button className={`hamburger hamburger--emphatic fadein one ${this.state.active}`} onClick={this.handleClick} type="button">
<span className="homeMenuTextButton">Menu</span>
<span className="hamburger-box">
<span className="hamburger-inner"></span>
</span>
</button>
);
}
}

export default Hamburger;

最佳答案

在最简单的形式中,您将拥有一个容器组件,它环绕着它们并管理组件的状态。

<MenuContainer>
<Hamburger />
<MenuOverlay />
</MenuContainer>

并且在 <MenuContainer>你会有 active 的状态一些快速的伪代码。

class MenuContainer extends React.Component {
constructor() {
super();

this.state = { active: false}
}

toggleMenu = () => {

// function that will toggle active/false
this.setState((prevState) => {
active: !prevState.active
});
}


render() {
return (
<div>
<Hamburger active={this.state.active} onClick={this.toggleMenu} />
<MenuOverlay active={this.state.active} />
</div>
)
}
}

所以在汉堡包中,您只需使用 this.props.onClick更改事件状态,然后在那些相应的组件中使用 this.props.active 的 Prop 以确定应应用哪些类等。

关于javascript - React - 从另一个组件的 onClick 切换一个组件的显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41879069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com