I\'m trying to figure out how to make the clipboard events return false
on the onCopy event. I use for test the onCopy
handler and e.preventDefau
This should be a comment but I don't have enough reputation. I think e.preventDefault() is enough for (at least) React 16.
Working example on Codesandbox
Above solution which is mentioned doesn't seems working for me, but if talk about counter values in state its getting managed properly by writing handlerCopy in below manner(Updation of state values).
import React from 'react';
import ReactDOM from 'react-dom';
import PropTypes from 'prop-types';
import ReactDOMServer from 'react-dom/server';
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
time: '',
timer: false,
counter: 0
};
}
handlerCopy(e) {
var val = this.state.counter;
val = val + 1;
this.setState({
counter: val
}, function(){
console.log('new acounter:- ', this.state.counter);
})
alert('Don\'t copy it!');
}
render() {
return (
<React.Fragment>
<p onCopy={(e) => this.handlerCopy(e)}>Copy me!</p>
<p>Copy count: {this.state.counter}</p>
</React.Fragment>
);
}
}
document.addEventListener('click', function(e) {
console.log('propagation',e)
}, false);
export default App;
This handlerCopy function mentioned above is not making any changes for me @Max Wolfen
handlerCopy(e) {
console.log(e.target.innerHTML);
e.preventDefault();
e.nativeEvent.stopImmediatePropagation();
this.setState(prevState => ({
counter: prevState.counter + 1
}));
alert('Don\'t copy it!');
}
It's a really good question!
This is happen, beause React’s actual event listener is also at the root of the document, meaning the click event has already bubbled to the root. You can use e.nativeEvent.stopImmediatePropagation()
to prevent other event listeners.
Try it:
import React from 'react';
import ReactDOM from 'react-dom';
import PropTypes from 'prop-types';
import ReactDOMServer from 'react-dom/server';
import './index.css';
class Copy extends React.Component {
constructor(props) {
super(props);
this.state = {
time: '',
timer: false,
counter: 0
};
this.handlerCopy = this.handlerCopy.bind(this);
}
handlerCopy(e) {
console.log(e.target.innerHTML);
e.preventDefault();
e.nativeEvent.stopImmediatePropagation();
this.setState(prevState => ({
counter: prevState.counter + 1
}));
alert('Don\'t copy it!');
}
render() {
return (
<React.Fragment>
<p onCopy={this.handlerCopy}>Copy me!</p>
<p>Copy count: {this.state.counter}</p>
</React.Fragment>
);
}
}
ReactDOM.render(
<Copy />,
document.getElementById('root'));