【问题标题】:Call a React component inside a function, when a button is clicked单击按钮时,在函数内调用 React 组件
【发布时间】:2018-12-11 19:50:15
【问题描述】:

Container 组件未呈现。谁能指导我为什么我无法渲染 Container 组件?

App.js

import React, { Component } from "react";
import "./App.css";
import Container from "./Container";

class App extends Component {
  add() {
    return <Container />;
  }
  render() {
    return (
      <div className="App">
        <button onClick={() => this.add()}>CLICK</button>
      </div>
    );
  }
}

export default App;

容器.js

import React, { Component } from "react";

export default class Container extends Component {
 render() {
   return <h1>hello</h1>;
  }
}

【问题讨论】:

标签: javascript reactjs react-component


【解决方案1】:

只需在要渲染组件的函数中更改 this.state 即可。 this.setState({ addContainer: true }) 在 render() 函数中正常渲染所有组件,当状态发生变化时,您的组件将自动被渲染。

【讨论】:

    【解决方案2】:

    您的函数未呈现,因为您的方法 add() 的返回不在您的 render() 方法中。它在onClick() 内,因此不会渲染。像下面的 sn-p 一样尝试:

    class Container extends React.Component {
        render(){
          return <h1> Hello World </h1>
        }
    }
    
    class App extends React.Component {
      state= { render: false }
      add = () => {
        this.setState({render : !this.state.render})
      }
     render() {
      return (
       <div className="App">
         <button onClick={() => this.add()}>CLICK</button>
         { this.state.render &&
            <Container/>
         }
       </div>
      );
     }
    }
    
    ReactDOM.render(<App/>,document.getElementById('root'))
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
    <div id="root"></div>

    您甚至可以切换&lt;Container&gt; 渲染,就像我在上面所做的那样,但是您不能在 onClick 中返回一个组件并期望它会被渲染。

    【讨论】:

      【解决方案3】:

      您可以设置状态并在按钮单击时呈现组件

      import React, { Component } from "react";
       import "./App.css";
       import Container from "./Container";
      
       class App extends Component {
        state = {
           addContainer: []
        }
        add() {
           this.setState(prevState => {addContainer: prevstate.addContainer.concat([0])})
        }
       render() {
        return (
         <div className="App">
           {this.state.addContainer.map(() => {
               return <Container />
           })}
           <button onClick={() => this.add()}>CLICK</button>
         </div>
        );
       }
      }
      
      export default App;
      

      或者如果它只是一个您想要在按钮单击时切换其可见性的容器

       import React, { Component } from "react";
       import "./App.css";
       import Container from "./Container";
      
       class App extends Component {
        state = {
           addContainer: false
        }
        add() {
           this.setState(prevState => {addContainer: !prevstate.addContainer)})
        }
       render() {
        return (
         <div className="App">
           {this.state.addContainer &&  <Container />}
           <button onClick={() => this.add()}>CLICK</button>
         </div>
        );
       }
      }
      
      export default App;
      

      【讨论】:

      • 你的解决方案没有解决我的问题,我想在函数内部调用组件。 @Shubham Khatri
      • 调用组件是什么意思?据我了解,使用上述方法可以简单地渲染它
      猜你喜欢
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多