在React

时间:2018-10-25 23:13:18

标签: javascript reactjs

我在React渲染函数中有以下代码:

<div>
    <InnerBox>
        <div>Box 1</div>
        <HiddenBox />
    </InnerBox>

    <InnerBox>
        <div>Box 2</div>
        <HiddenBox />
    </InnerBox>

    <InnerBox>
        <div>Box 3</div>
        <HiddenBox />
    </InnerBox>
</div>

我希望每个<HiddenBox />元素都被隐藏,直到单击<InnerBox>元素为止。 <InnerBox>的任何其他子元素应始终显示。

我目前在InnerBox类中具有以下功能:

handleClick(){
    this.setState({
        button_state: "clicked"
    })
}

我的InnerBox类的呈现函数看起来像这样:

return (
    <div onClick={this.handleClick.bind(this)}>{this.props.children}</div>
)

但是,对于将要单击的特定HiddenBox的{​​{1}}元素的显示切换到什么位置,我有点困惑。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

如果我的理解正确,那么您可以通过以下方式更新<InnerBox/>的呈现方式来解决此问题:

<div>
    <InnerBox>
        <div>Box 1</div>
    </InnerBox>

    <InnerBox>
        <div>Box 2</div>
    </InnerBox>

    <InnerBox>
        <div>Box 3</div>
    </InnerBox>
</div>

然后您可以像这样更新render()的{​​{1}}函数:

<InnerBox/>

最后,您将以这种方式更新render() { const { button_state } = this.state; const isButtonStateClicked = button_state === 'clicked'; return (<div onClick={this.handleClick.bind(this)}> { this.props.children } { isButtonStateClicked && <HiddenBox /> } </div>) } ,以实现隐藏/显示切换行为:

handdleClick()

答案 1 :(得分:1)

切换隐藏和显示。

export default class InnerBox extends React.Component {
  state = {
    buttonClicked: false
  };
  handleClick = () => {
    this.setState({
      buttonClicked: !this.state.buttonClicked
    });
  };
  render() {
    return (
      <div onClick={this.handleClick}>
        {this.props.children}
        {this.state.buttonClicked && <HiddenBox />}
      </div>
    );
  }
}