【问题标题】:Using button in one component to render another component in main (App) component使用一个组件中的按钮来渲染主(App)组件中的另一个组件
【发布时间】:2019-11-03 20:29:29
【问题描述】:

我正在尝试显示/隐藏一个组件,它是 ItemMain,并且使用另一个组件 NavLogoNew 中的按钮导入到主 App 组件。我尝试以多种不同的方式执行此操作,但看起来按钮不知道它是否被单击,当我手动更改真/假时它可以工作。在网络上,我发现了很多关于只涉及两个组件的情况的东西,但没有这样的。我的代码:

应用程序

import React from 'react';
import './App.css';
import { tsPropertySignature } from '@babel/types';
import { statement } from '@babel/template';

import NavBar from './../Components/Navigation/NavBar/NavBar.js';
import ItemMain from './../Components/Item/ItemMain/ItemMain.js';
import ItemList from './../Components/Item/ItemList/ItemList.js';
import NavButtonTop from './../Components/Navigation/NavButton/NavButtonTop/NavButtonTop.js';
import NavLogoNew from './../Components/Navigation/NavButton/NavButtonNew/NavLogoNew.js';

class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      visible: false
    };
    this.handleClick = this.handleClick.bind(this);
  }

  handleClick() {
    this.setState({
      visible: !this.visible
    })
  }     

  render() {
    return (
      <div className="App">
        <NavBar />
        {this.state.visible ? <ItemMain /> : null}
        <ItemList />
        <NavButtonTop name='UP'/>
      </div>
    );
  }
}


export default App;

NavLogoNew:

import React from 'react';
import './NavLogoNew.css';
import ItemMain from './../../../Item/ItemMain/ItemMain.js'


class NavLogoNew extends React.Component {
    render() {
        return (    
            <button 
                className='NavLogoNew'
                onClick={this.props.click}  
            >
                {this.props.name}  
            </button>
        );
    }
}

export default NavLogoNew;

【问题讨论】:

  • 您没有在主应用程序中使用NavLogoNew,您只需将其导入即可。为了更好的可读性,将 click 属性名称更改为 onClick,然后像这样使用它:&lt;NavLogoNew name="Some Name" onClick={this.handleClick}/&gt;
  • 您的 handleClick 函数缺少一些东西 handleClick() { this.setState({ visible: !this.visible }) }
  • AfikDeri - 导入是尝试以不同方式进行操作的剩余部分。 的一部分,所以我不能单独导入它。

标签: javascript reactjs react-component


【解决方案1】:

您的 handleClick 函数缺少某些东西
使用!this.state.visible 所以从下面改变

handleClick(){
    this.setState({
      visible: !this.visible
    })
  }


 handleClick = () => {
    this.setState({
      visible: !this.state.visible
    })
  }

将handleClick函数传递给NavLogoNew,如下所示

&lt;NavLogoNew onClick = {this.handleClick} /&gt;

在 NavLogoNew 组件内部,您应该按如下方式调用它

class NavLogoNew extends React.Component {
    render() {
        return (    
            <button 
                className='NavLogoNew'
                onClick={() => this.props.onClick()}  
            >
                {this.props.name}  
            </button>
        );
    }
}

【讨论】:

  • "当然是假设您将它作为道具传递给 NaveLogoNewcomponent" 像这样? onClick={this.props.handleClick}
  • 当它从 App 组件传递到 NaveLogoNewComponent 时,它应该是这样的 onClick={this.handleClick} 没有道具
  • 我已经对帖子进行了编辑,您现在应该对其进行测试。如果您正确遵循说明,您应该可以正常工作。您需要确定的一些事情是,如果您在单击 NavLogoNew 组件中的按钮后,父 (App.js) 更改的状态是。我假设您没有在 NavLogo 组件内执行任何绑定。
猜你喜欢
  • 2021-12-04
  • 1970-01-01
  • 2018-01-26
  • 1970-01-01
  • 2019-04-19
  • 2020-09-04
  • 2021-03-16
  • 2021-08-17
  • 1970-01-01
相关资源
最近更新 更多