要在某个React输入元素上设置事件监听器,例如onKeyPress监听器,我们可以像这样操作:
<SomeInputElement onKeyPress={this.someListener.bind(this)}>
现在,我应该怎样做才能使我的someListener
处于被动状态呢?
要在某个React输入元素上设置事件监听器,例如onKeyPress监听器,我们可以像这样操作:
<SomeInputElement onKeyPress={this.someListener.bind(this)}>
现在,我应该怎样做才能使我的someListener
处于被动状态呢?
您可以使用对元素的引用,在componentDidMount
中手动添加事件监听器,并在componentWillUnmount
中移除它们。
class Example extends Component {
componentDidMount() {
this.input.addEventListener('keypress', this.onKeyPress, { passive: false });
}
componentWillUnmount() {
this.input.removeEventListener('keypress', this.onKeyPress);
}
onKeyPress(e) {
console.log('key pressed');
}
render() {
return (
<SomeInputElement ref={ref => this.input = ref} />
);
}
}
import {PassiveListener} from 'react-event-injector';
<PassiveListener onKeyPress={this.someListener.bind(this)}>
<SomeInputElement/>
</PassiveListener>
<canvas>
元素作为子元素时,它根本没有被渲染。 - Mikhailconst Foo = (props) => {
const ref = useRef();
useEffect(() => {
const { current } = ref;
if (!current) {
return;
}
const abort = new AbortController();
const { signal } = abort;
current.addEventListener('keypress', onKeyPress, { passive: true, signal });
return () => abort.abort();
}, []);
return <input {...props} ref={ref} />;
};