Как я могу показать свой компонент react из hide и повторно отобразить снова?

#javascript #reactjs

#javascript #reactjs

Вопрос:

Вот мой html-код

 <div id="btn">Click</div>
<div id="main">

</div>
  

Вот мой component.js код файла

 class Main extends Component {
  constructor(props, context) {
    super(props, context);
    this.state = {
      name : ""
    }
  }

  render(){
    <input type="text" className="form-control" id="userName"  defaultValue={this.state.name}></input>
  }


}

ReactDOM.render(<Main />, document.getElementById('main'));
  

Когда я нажимаю на #btn, я использую javascript для отображения или скрытия моего компонента #main react, который имеет компонент ввода, а состояние имени по умолчанию — пустая строка.

Если я введу некоторое значение для своего ввода, например ‘abc’, а затем снова нажму #btn, чтобы скрыть #main, затем снова нажмите #btn, чтобы показать #main .’abc’ все еще там.

Как я могу заставить свой компонент повторно отображать базу в состоянии по умолчанию каждый раз, когда я нажимаю #btn, чтобы показать #main?

Ответ №1:

это то, что вы хотите?

 class Main extends React.Component {
  constructor(props, context) {
    super(props, context);
    this.state = {
      name : ""
    };
  }
	
  handleInputChange = () => {
    const { value } = this.refs.name;
	this.setState({name: value});
  };

  handleBtnClick = () => {
	const target = this.refs.name;
    target.classList.toggle('hidden');
  };

  render() {
    return (
	  <div>
	    <p className="form-control">
		<input 
		  type="text"  
		  id="userName" 
		  ref="name"
		  value={this.state.name} 
		  onChange={this.handleInputChange}
		/>
	    </p>
	    <button onClick={this.handleBtnClick}>button</button>
	  </div>
	);
  }
}

ReactDOM.render(
	<Main />, 
	document.getElementById('main')
);  
 .hidden {
	visibility: hidden;
}  
 <div id="main"></div>
<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>  

Ответ №2:

Вы монтируете свое приложение React в элементе #main. Контекст React не будет знать ничего, кроме этого. Если вы хотите показывать или скрывать компоненты при нажатии кнопки, вы должны включить свой элемент #btn в свой компонент React. Что-то вроде этого должно работать:

 <!-- Your html file -->
<div id="main"></div>

// component.js file
/* Use a wrapper class to control when you want components to render */
class WrapperMain extends Component {
    constructor(props) {
        super(props);
        this.state = { showMain: true };
    }

    handleBtnClick() {
        // Calling setState forces a re-render
        this.setState({ showMain: !this.state.showMain });
    }

    render() {
        return (
            <div>
                {/* Bring your click div into the React context so that it 
                can better control the rendering of other React components */}
                <div id="btn" onClick={this.handleBtnClick.bind(this)}>
                    Click
                </div>

                {/* You can use an anonymous function to allow a check for 
                whether the <Main /> component should be shown or not */}
                {(() => {
                    if (this.state.showMain) {
                        return <Main />
                    }
                })()}
            </div>
        )
    }
}

class Main extends Component {
    constructor(props, context) {
        super(props, context);
        this.state = { name : "" }
    }

    render() {
        return (
            <div>
                <input 
                type="text" 
                className="form-control" 
                id="userName" 
                defaultValue={this.state.name}></input>
            </div>
        );
    }


}

ReactDOM.render(<WrapperMain />, document.getElementById("main"));