每次点击显示不同的组件(使用挂钩)

to display a different component with each click (using hooks)

我想在每次 button 单击时显示不同的 component。 我确定 syntax 是错误的,有人可以帮助我吗?浏览器不加载 我很想解释我哪里出错了

单击按钮后,App component 上应显示一个组件(而不是 HomePage)。帮助我了解正确的方法。

谢谢!

App.js

import React, {useState} from 'react';
import './App.css';
import Addroom from './components/Addroom.js'
import HomePage from './components/HomePage.js'

function App() {

  const [flag, setFlage] = useState(false);



  return (
    <div className="App">
     
      <h1>My Smart House</h1>

      <button onClick={()=>{setFlage({flag:true})}}>Addroom</button>
      <button onClick={()=>{setFlage({flag:false})}}>HomePage</button>


      {setState({flag}) && (
        <div><Addroom  index={i}/></div>
      )}
      {!setState({flag}) && (
        <div><HomePage index={i}/></div>
      )}
    </div>
  )
}
export default App;

首页

import React from 'react'

export default function HomePage() {
    return (
        <div>
            HomePage
        </div>
    )
}

地址室

import React from 'react'

export default function Addroom() {
    return (
        <div>
            Addroom
        </div>
    )
}

我没有测试它,但我可以看到它应该是这样的:

<button onClick={()=>setFlage(true)}>Addroom</button>
<button onClick={()=>setFlage(false)}>HomePage</button>

  {flag && (
    <div><Addroom index={i}/></div>
  )}
  {!flag && (
    <div><HomePage index={i}/></div>
  )}

您需要使用参数 Boolean 调用 setFlage 函数说 truefalse 并且它会更改您要读取的 flag 变量.

试试下面的方法。

function App() {
  const [flag, setFlage] = useState(false);

  return (
    <div className="App">
      <h1>My Smart House</h1>

      <button
        onClick={() => {
          setFlage(true);
        }}
      >
        Addroom
      </button>
      <button
        onClick={() => {
          setFlage(false );
        }}
      >
        HomePage
      </button>
      {flag ? <Addroom /> : <HomePage /> }
      
    </div>
  );
}


您缺少渲染方法,而且您应该使用 setState 进行反应式渲染。(当您使用状态变量并且值更改后,渲染方法将重建输出,因此这将加载您的条件组件。

https://jsfiddle.net/khajaamin/f8hL3ugx/21/

--- HTML

class Home extends React.Component {
  constructor(props) {
    super(props);
  }
  render() {
    return <div> In Home</div>;
  }
}

class Contact extends React.Component {
  constructor(props) {
    super(props);
  }
  render() {
    return <div> In Contact</div>;
  }
}

class TodoApp extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      flag: false,
    };
  }

  handleClick() {
    this.setState((state) => ({
      flag: !state.flag,
    }));
    console.log("hi", this.state.flag);
  }

  getSelectedComp() {
    if (this.state.flag) {
      return <Home></Home>;
    }
    return <Contact></Contact>;
  }
  render() {
    console.log("refreshed");
    return (
      <div>
        <h1>
          Click On button to see Home component loading and reclick to load back
          Contact component
        </h1
        <button onClick={() => this.handleClick()}>Switch Component</button>
        {this.getSelectedComp()}
      </div>
    );
  }
}
ReactDOM.render(<TodoApp />, document.querySelector("#app"));