将事件添加到克隆的组件

时间:2019-03-05 17:47:55

标签: reactjs events clone

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

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

如何将click事件添加到此克隆的组件中,并在单击时调用其类内的函数? 我没有运气就尝试了以下方法:

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

3 个答案:

答案 0 :(得分:1)

您之前要关闭props对象花括号。另外,传递onClick函数而不是在其中调用警报,该警报将在组件安装时立即执行。

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);

答案 1 :(得分:0)

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

您需要传递一个函数:

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

答案 2 :(得分:0)

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

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

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