简体   繁体   English

未使用 React JS 中按钮的 onClick 事件呈现的 HTML 元素

[英]HTML elements not rendering with button's onClick event in React JS

I am relatively new to React and want to render input forms on click of a button.我对 React 比较陌生,想在单击按钮时呈现输入表单。 The function called in button's onClick works for stuff like console.log() but does not render the HTML elements.在按钮的 onClick 中调用的函数适用于 console.log() 之类的东西,但不呈现 HTML 元素。 I have absolutely no clue as to why is this happening.我完全不知道为什么会发生这种情况。 I am using function component.我正在使用功能组件。 Below is the code snippet that is concerned with the problem.下面是与问题相关的代码片段。

const UserAppointment = () => {
  function renderHtml () {
    return(
      <div>
        <h1>I want this to render on click</h1>
      </div>
    )
  }

  return (
    <div>
      <button onClick={renderHtml}>Render Input forms</button>
      <br /><br /><br />
      <button onClick={()=> { dispatch(logout()) }}>Logout</button>
    </div>
  )
}
export default UserAppointment ;

I suggest you should use state to save and render html:我建议你应该使用state来保存和呈现 html:

const UserAppointment  = () => {

    const [html, setHtml] = useState(null);

    function renderHtml () {
        return(
            <div>
                <h1>I want this to render on click</h1>
            </div>
        )
    }


    return (
        <div>
            {html}
            <button onClick={(() => setHtml(renderHtml()))}>Render Input forms</button>

            <br /><br /><br />

            <button onClick={() => { dispatch(logout()) }}>Logout</button>
        </div>
    )

}

Instead of a renderHtml function, have a boolean state.而不是renderHtml函数,有一个布尔状态。 When clicked, toggle the boolean, and conditionally return the JSX when true:单击时,切换布尔值,并在为 true 时有条件地返回 JSX:

 const App = () => { const [show, setShow] = React.useState(false); return ( <div> <button onClick={() => setShow(!show)}>Render Input forms</button> <br /><br /><br /> <button onClick={()=> { dispatch(logout()) }}>Logout</button> { !show ? null : ( <div> <h1>I want this to render on click</h1> </div> ) } </div> ) }; ReactDOM.render(<App />, document.querySelector('.react'));
 <script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script> <script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script> <div class="react"></div>

When you use event handlers such as onClick() , React doesn't return any HTML back from the function that you pass in.当您使用诸如onClick() 之类的事件处理程序时,React 不会从您传入的函数中返回任何 HTML。

Like other commenters said, you need to use React state to manage when your div is shown and when it is hidden.就像其他评论者所说的那样,您需要使用 React 状态来管理您的 div 何时显示以及何时隐藏。

  • First set the state since you are using functional component.由于您使用的是功能组件,因此首先设置状态。

     const [Heading, setHeading] = useState("")
  • Then use your onClick event and pass a function to it.然后使用您的 onClick 事件并将函数传递给它。

     <button onClick={renderHtml}>Render Input forms</button>
  • Set your state to the heading inside renderHtml function.将您的状态设置为 renderHtml 函数内的标题。

     const renderHtml =()=> { setHeading("I want this to render on click") }
  • Display your heading in h1 in return.作为回报,在 h1 中显示您的标题。

     <h1>{Heading}</h1>

Full code:完整代码:

const [Heading, setHeading] = useState("")
  const renderHtml =()=> {
    setHeading("I want this to render on click")
  }

  return (
    <div>
      <h1>{Heading}</h1>
      <button onClick={renderHtml}>Render Input forms</button>
      <br /><br /><br />
      <button onClick={() => { dispatch(logout()) }}>Logout</button>
    </div>
  )
}
    

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM