将事件添加到克隆组件

问题描述 投票:0回答:3

我正在使用以下方法克隆组件并修改其道具。

    const clone = React.cloneElement(<BallComponent>, {
        key: new Date().getTime()
    });

如何在单击时将click事件添加到此克隆组件并在其类中调用函数?我试过以下没有运气:

    const clone = React.cloneElement(<BallComponent>, {
        key: new Date().getTime()}
        onClick: alert('test');
    });
reactjs events clone
3个回答
1
投票

你之前关闭道具对象大括号。另外,传递onClick一个函数,而不是在那里调用alert,它将在组件安装时正确执行。

const clone = React.cloneElement(<BallComponent>, {
    key: new Date().getTime()
    onClick: () => { alert('test') }
});

这是使用React.cloneElement的最小示例。

import React from "react";
import ReactDOM from "react-dom";

class Demo extends React.Component {
  render() {
    return <p onClick={this.props.click}>This is Demo. Click me.</p>;
  }
}

function App() {
  const clone = React.cloneElement(<Demo />, {
    click: () => {
      alert("You clicked Demo :)");
    }
  });

  return (
    <div className="App">
      {clone}
    </div>
  );
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

0
投票

在该示例中,您正在执行alert('test')并将其返回值分配给onChange,在本例中为undefined

你需要的是传递一个函数:

 const clone = React.cloneElement(<BallComponent>, {
        key: new Date().getTime()}
        onClick: () => { alert('test') };
    });

0
投票

使用下面的代码片段,它将工作。

var Clone = React.cloneElement(<BallComponent/>, {
      key: new Date().getTime(),
      onClick: () => { alert('test') }
    });

P.S.-确保BallComponent具有onClick,除非警报不会触发。

© www.soinside.com 2019 - 2024. All rights reserved.