reactjs React按钮单击隐藏和显示组件

z0qdvdin  于 2023-08-04  发布在  React
关注(0)|答案(3)|浏览(134)

我有一个切换按钮,显示和隐藏文本。当按钮被点击,我希望它隐藏另一个组件,如果再次点击它显示它。
我在这里创建了一个repl:
https://repl.it/repls/DapperExtrasmallOpposites
我想保留原来的显示/隐藏文本,但我还想在单击按钮时隐藏一个附加组件。
如何传递状态,或者如何创建if语句/三元运算符来测试它是处于显示状态还是隐藏状态。
在上面的repl中一切都有意义!

idfiyjo8

idfiyjo81#

要做到这一点,你应该把状态提高一点。可以将状态更改从切换组件传播到父组件,然后以任何方式使用它,但这不是首选方式。
如果你把状态放在父组件中,你可以通过props传递给需要的组件。

import React from "react";

export default function App() {
  // Keep the state at this level and pass it down as needed.
  const [isVisible, setIsVisible] = React.useState(false);
  const toggleVisibility = () => setIsVisible(!isVisible);

  return (
    <div className="App">
      <Toggle isVisible={isVisible} toggleVisibility={toggleVisibility} />
      {isVisible && <NewComponent />}
    </div>
  );
}

class Toggle extends React.Component {
  render() {
    return (
      <div>
        <button onClick={this.props.toggleVisibility}>
          {this.props.isVisible ? "Hide details" : "Show details"}
        </button>
        {this.props.isVisible && (
          <div>
            <p>
              When the button is click I do want this component or text to be
              shown - so my question is how do I hide the component
            </p>
          </div>
        )}
      </div>
    );
  }
}

class NewComponent extends React.Component {
  render() {
      return (
          <div>
              <p>When the button below (which is in another component) is clicked, I want this component to be hidden - but how do I pass the state to say - this is clicked so hide</p>
          </div>
      )
  }
}

字符串

7tofc5zh

7tofc5zh2#

我刚看了你的REPL。
您需要在App组件中具有可见性状态,然后向下传递一个函数以将其更新到Toggle组件。
这样就很容易有条件地呈现NewComponent组件,如下所示:

render() {
  return (
    <div className="App">
    {this.state.visibility && <NewComponent />}
    <Toggle setVisibility={this.setVisibility.bind(this)} />
    </div>
  );
}

字符串
其中setVisibility函数是更新可见性状态的函数。

c9x0cxw0

c9x0cxw03#

import React, { useState } from "react";

export default function VisibilityToggle() {
  const [visibility, setVisibility] = useState(true);

  return (
    <div className="App">
      {visibility && <h1>Hi Toggle me Please</h1>}
      <input
        type="submit"
        onClick={() => {
          if (visibility) {
            setVisibility(false);
          }
          if (!visibility) {
            setVisibility(true);
          }
        }}
      />
    </div>
  );
}

字符串

相关问题