Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Show or hide element in React

I am messing around with React.js for the first time and cannot find a way to show or hide something on a page via click event. I am not loading any other library to the page, so I am looking for some native way using the React library. This is what I have so far. I would like to show the results div when the click event fires.

var Search= React.createClass({     handleClick: function (event) {         console.log(this.prop);     },     render: function () {         return (             <div className="date-range">                 <input type="submit" value="Search" onClick={this.handleClick} />             </div>         );     } });  var Results = React.createClass({     render: function () {         return (             <div id="results" className="search-results">                 Some Results             </div>         );     } });  React.renderComponent(<Search /> , document.body); 
like image 691
user1725382 Avatar asked Jul 01 '14 05:07

user1725382


People also ask

How do you show or hide an element in React?

To show and hide components and elements in React you will need to either use conditional rendering, css styles or animation libraries. For the most part conditional rendering will be done by checking if a value passes a condition, just like in an if statement but for react components and JSX.


1 Answers

React circa 2020

In the onClick callback, call the state hook's setter function to update the state and re-render:

const Search = () => {    const [showResults, setShowResults] = React.useState(false)    const onClick = () => setShowResults(true)    return (      <div>        <input type="submit" value="Search" onClick={onClick} />        { showResults ? <Results /> : null }      </div>    )  }    const Results = () => (    <div id="results" className="search-results">      Some Results    </div>  )    ReactDOM.render(<Search />, document.querySelector("#container"))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.13.1/umd/react.production.min.js"></script>  <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.13.1/umd/react-dom.production.min.js"></script>    <div id="container">    <!-- This element's contents will be replaced with your component. -->  </div>

JSFiddle

React circa 2014

The key is to update the state of the component in the click handler using setState. When the state changes get applied, the render method gets called again with the new state:

var Search = React.createClass({      getInitialState: function() {          return { showResults: false };      },      onClick: function() {          this.setState({ showResults: true });      },      render: function() {          return (              <div>                  <input type="submit" value="Search" onClick={this.onClick} />                  { this.state.showResults ? <Results /> : null }              </div>          );      }  });    var Results = React.createClass({      render: function() {          return (              <div id="results" className="search-results">                  Some Results              </div>          );      }  });    ReactDOM.render( <Search /> , document.getElementById('container'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.6.2/react.min.js"></script>  <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/15.6.2/react-dom.min.js"></script>    <div id="container">    <!-- This element's contents will be replaced with your component. -->  </div>

JSFiddle

like image 89
Douglas Avatar answered Dec 15 '22 12:12

Douglas