我正在使用以下方法克隆组件并修改其道具。
const clone = React.cloneElement(<BallComponent>, {
key: new Date().getTime()
});
如何将click事件添加到此克隆的组件中,并在单击时调用其类内的函数? 我没有运气就尝试了以下方法:
const clone = React.cloneElement(<BallComponent>, {
key: new Date().getTime()}
onClick: alert('test');
});
答案 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,除非警报不会触发。