【问题标题】:React button onClick event call other componentReact 按钮 onClick 事件调用其他组件
【发布时间】:2020-12-09 11:14:55
【问题描述】:

我想点击按钮然后显示模态事件 但是这段代码没有显示模态,也没有反应
所以我尝试添加代码{()=>BtnModal()}arrowfunction,但同样没有反应。 我搜索了其他解决方案this keyworld add,但是这个keyworld没有使用功能组件。 我该如何解决这个问题?

Modal.js(我用过antd设计)

import { Modal } from 'antd';

function BtnModal(){
  const [modal2Visible,setModal2Visible]=useState(true);

  return (
    <>
      <Modal
        title="Modal"
        centered
        visible={modal2Visible}
        onOk={() => setModal2Visible(false)}
        onCancel={() => setModal2Visible(false)}
      >
      <p>Lorem, ipsum dolor sit amet consectetur adipisicing elit. Sed dolorem ratione qui iste.<br />
      Dignissimos nisi sint rerum numquam obcaecati voluptatem quidem, quasi rem,<br />
      veritatis voluptatum omnis excepturi, fugit quia harum?</p>
      </Modal>
    </>
  );
};

export default BtnModal;

Header.js

import BtnModal from './BtnModal';

function Header() {
  return (
    <>
    <div className="Head-wrap">
      <span>Header</span>
    </div>
    <div className="btn-list">
      <button onClick={BtnModal}>TestBtn</button>
    </div>
  </>
  );
};

export default Header;

我正在尝试解决这个问题。TT 我正在尝试解决这个问题.....

【问题讨论】:

    标签: reactjs buttonclick react-functional-component


    【解决方案1】:

    首先,您不能在单击按钮时调用组件。而是设置一个状态,根据状态值有条件地渲染组件,在需要渲染组件时设置状态。

    在您的问题中,在 Header.js 中创建一个状态,以维持 Modal 的打开/可见状态,并在 buttononClick 上相应地设置该状态。然后将该状态作为道具传递给BtnModal,然后将该道具值分配给Modalvisible道具。

    Modal.js

    import { Modal } from 'antd';
    
    function BtnModal({visible, onCancel, onOk}){
      return (
        <>
          <Modal
            title="Modal"
            centered
            visible={visible}
            onOk={onOk}
            onCancel={onCancel}
          >
          <p>Lorem, ipsum dolor sit amet consectetur adipisicing elit. Sed dolorem ratione qui iste.<br />
          Dignissimos nisi sint rerum numquam obcaecati voluptatem quidem, quasi rem,<br />
          veritatis voluptatum omnis excepturi, fugit quia harum?</p>
          </Modal>
        </>
      );
    };
    
    export default BtnModal;
    

    Header.js

    import BtnModal from './BtnModal';
    
    function Header() {
      const [modal2Visible,setModal2Visible]=useState(true);
    
      const handleModalOpen = () =>{
        setModal2Visible(true)
      }
      
      const handleCancel = () =>{
        setModal2Visible(false)
      }
      const handleOk = () =>{
        setModal2Visible(false)
      }
    
      return (
        <>
        <div className="Head-wrap">
          <span>Header</span>
        </div>
        <div className="btn-list">
          <button onClick={handleModalOpen}>TestBtn</button>
          <BtnModal visible={modal2Visible} onCancel={handleCancel} onOk={handleOk}/>
        </div>
      </>
      );
    };
    
    export default Header;
    

    【讨论】:

    • 哇,谢谢!我成功了按钮单击打开模式!顺便说一句,Modal 组件是我尝试使用它的全局&可重用组件。可能是调用Modal组件中的另一个组件,然后OpenCancelOk一直声明相同的功能?
    • 我无法完全理解您的问题。但据我了解,您不需要传递所有函数,然后将它们添加到全局组件中。相反,您可以像这样在BtnModal 中传播道具,&lt;Modal {...props}&gt;lorem&lt;/Modal&gt;。在此,您无需手动添加功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 2022-11-21
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2015-06-25
    相关资源
    最近更新 更多