将事件添加到克隆的组件

Add events to cloned component

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

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

如何向这个克隆的组件添加点击事件并在点击时调用其 class 中的函数? 我尝试了以下方法但没有成功:

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

你之前关闭了道具对象的大括号。此外,传递 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);

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

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

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

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

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

P.S.-Make sure BallComponent have onClick unless alert will not fire.