使用 React 隐藏组件

Posted

技术标签:

【中文标题】使用 React 隐藏组件【英文标题】:Hiding a component with React 【发布时间】:2017-03-24 10:27:00 【问题描述】:

我的代码中有几个反应类。 当应用启动时,用户会看到:

<div>
    <h1 className="headings" id="heading"> Football </h1>
      <input type="text" placeholder="name" />
      <input type="email" placeholder="use noths email" />
      <input type="submit" onClick=() => this.handleClick()/>
       this.state.results ? <Decision /> : null 
        <Thanks />
 </div>

结果的状态有效,因为当我单击上面的按钮时,它会将状态从 false 变为 true。 然后返回输入字段下方。但我宁愿它取代上面的输入字段。如何实现?

总之,一旦用户输入用户名和电子邮件并点击提交,我希望代码呈现在输入字段的页面而不是下方

【问题讨论】:

【参考方案1】:

render() 方法中将输出声明为变量:

let output;

注意:如果您不支持 ES6,请使用 var

然后使用条件语句填充变量:

if (this.state.results) 
  output = <Decision />;

else 
  output = (
    <div>
      <input type="text" placeholder="name" />
      <input type="email" placeholder="use noths email" />
      <input type="submit" onClick=() => this.handleClick()/>
    </div>
  )

现在只需在render() 方法的return 语句中返回output

return (
  <div>
    <h1 className="headings" id="heading"> Football </h1>
    output
    <Thanks />
  </div>
)

【讨论】:

太好了,正是我需要的! 不过,我还有一个快速的问题。说在我渲染第二个输出之后,如果我想在那之后再渲染另一个东西怎么办?即状态发生了变化,它呈现了一个新页面,但是如果我想在那个状态下做其他事情并重新呈现其他东西怎么办?添加一个 else if 不起作用,因为 ifs 的工作方式(即一旦发现某事是真的,它就会跳出来)【参考方案2】:

听起来你想把输入元素变成单独的&lt;Form&gt;组件并渲染

<div>
    <h1 className="headings" id="heading"> Football </h1>
     this.state.results ? <Decision /> : <Form handleClick= this.handleClick /> 
    <Thanks />
</div>

形式类似于

const Form = props => (
    <div>
        <input type="text" placeholder="name" />
        <input type="email" placeholder="use noths email" />
        <input type="submit" onClick=this.props.handleClick/>
    <div>
);

【讨论】:

以上是关于使用 React 隐藏组件的主要内容,如果未能解决你的问题,请参考以下文章

react 高阶组件实现按钮权限显示与隐藏实现

react 高阶组件实现按钮权限显示与隐藏实现

在 ReactJS 中显示/隐藏组件

在 react-native 中显示/隐藏状态更改的组件时出错

是否可以在 React.js 中从子组件中隐藏父组件?

在 React Native WebView 中隐藏 React.js 组件