Вызвать компонент React внутри функции при нажатии кнопки - PullRequest
0 голосов
/ 03 июля 2018

Компонент 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;

Container.js

import React, { Component } from "react";

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

Ответы [ 3 ]

0 голосов
/ 03 июля 2018

Ваша функция не рендерится, потому что возвращаемый вами метод add() не находится внутри вашего render() метода. Он внутри onClick(), поэтому он не будет отображаться. Попробуйте, как показано ниже:

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>

Вы можете даже включить рендеринг <Container>, как я делал выше, но вы не можете вернуть компонент внутри onClick и ожидать, что он будет отрендерен.

0 голосов
/ 07 апреля 2019

Просто измените this.state в функции, в которой вы хотите визуализировать компонент. this.setState ({addContainer: true}) Обычно все компоненты отображаются в функции render (), и при изменении состояния ваш компонент будет автоматически отображаться.

0 голосов
/ 03 июля 2018

Вы можете установить состояние и визуализировать компонент по нажатию кнопки

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...