reactjs - 如何隐藏一个div并将其替换为reactjs中的另一个div?

Posted

技术标签:

【中文标题】reactjs - 如何隐藏一个div并将其替换为reactjs中的另一个div?【英文标题】:How to hide a div and replace it with another div in reactjs? 【发布时间】:2018-08-24 03:09:49 【问题描述】:

有 2 个 div。 div1 和 div2。 最初,显示 div1 而隐藏 div2。 单击按钮时,必须隐藏 div1,并在 div1 的位置显示 div2。

【问题讨论】:

只是有条件地渲染一个或另一个,并在单击按钮时更改条件。您可以将条件存储在状态中 【参考方案1】:

创建一个状态来指示是显示div1 还是显示div2。然后,将onClick 处理函数添加到按钮。最后,根据该状态有条件地渲染要显示的组件。

代码:

class TwoDivs extends React.Component 
  state = 
    div1Shown: true,
  

  handleButtonClick() 
    this.setState(
      div1Shown: false,
    );
  

  render() 

    return (
      <div>
        <button onClick=() => this.handleButtonClick()>Show div2</button>
        
        this.state.div1Shown ? 
           (<div className="div1">Div1</div>) 
           : (<div className="div2">Div2</div>)
        
      </div>
    );
  

【讨论】:

【参考方案2】:

您可以通过在组件的状态中添加一个新属性来实现它。单击按钮将简单地切换该状态,并且由于 setState 方法,组件将重新渲染。请注意,这将在两个 div 之间切换。如果您只想显示第二个,请像这样设置新状态:this.setState(firstDivIsActive: false

class MyComponent extends React.Component 
  constructor(props) 
    super(props);
    this.state = 
      firstDivIsActive: true
    ;
  

  render() 
    let activeDiv;

    if (this.state.firstDivIsActive) 
      activeDiv = <div>I am one</div>;
     else 
      activeDiv = <div>I am two</div>;
    

    return (
      <div>
        <button
          onClick=() => 
            this.setState(
              firstDivIsActive: !this.state.firstDivIsActive
            );
          
        >
          Toggle Div
        </button>
        activeDiv
      </div>
    );
  

【讨论】:

【参考方案3】:

我会在简单的 html 和 JQuery 中完成如下操作:

<input id="DivType" type="hidden" value="div1" class="valid" />
<div id="div1" />
<div id="div2" />


function ToggleDiv() 
    var divType = $("#DivType").val();

    if (divType === "div1") 
        $("#div1").show();
        $("#div2").hide();
        $('#DivType input').value = "div2";
    
    else if (divType === "div2") 
        $("#div1").show();
        $("#div2").hide();
        $('#DivType input').value = "div1";
    

ToggleDiv 将在按钮的OnClick 事件上被调用。

不确定在 React 中是否有更好的方法。

【讨论】:

@RinoTom 我想要反应中的解决方案,而不是 jquery :)【参考方案4】:

类 ToggleDivs 扩展 React.Component

state = 
  showDiv1: true,


handleButtonClick() 
  this.setState(
    showDiv1: !this.state.showDiv1
  );


render() 
  const  showDiv1  = this.state;
  const buttonTitle = showDiv1 ? 'Div2' : 'Div1';

  const div1 = (<div className="div1">Div1</div>);
  const div2 = (<div className="div2">Div2</div>);

  return (
    <div>
      <button onClick=() => this.handleButtonClick()>Show buttonTitle</button>
      showDiv1 ? div1 : div2
    </div>
  );

【讨论】:

以上是关于reactjs - 如何隐藏一个div并将其替换为reactjs中的另一个div?的主要内容,如果未能解决你的问题,请参考以下文章

如何克隆隐藏输入的值并附加到另一个 div?

如何在节点中的文本中替换/注入html标签?

React js - 显示或隐藏 div

jQuery - 具有多个 div 的 mouseover/mouseout

如何使用 ajax 下载图像,然后将其替换为 div 背景?

js 把div 替换为 p