18

I'm making an app and I want to fire a function (in this case the showMessage) when the user presses Ctrl + Enter. How would I do this, preferably without jQuery?

import React from "react"
const App = React.createClass({
 showMessage () {
 console.log('hit');
 },
 render () {
 return (
 <div>
 <button onClick={this.showMessage}>Hit</button>
 </div>
 );
 }
});
module.exports = App;
Bryan
2,85525 gold badges39 silver badges45 bronze badges
asked Sep 6, 2016 at 17:39
1
  • Register onkeypress handler for the document in componentDidMount Commented Sep 6, 2016 at 17:45

2 Answers 2

30
  1. add event listener: document.addEventListener('keydown',this.keydownHandler)

  2. then in handler check e.keyCode===13 && e.ctrlKey

  3. don't forget to remove event listener in componentWillUnmount

const App = React.createClass({
 showMessage () {
 alert('SOME MESSAGE');
 },
 keydownHandler(e){
 if(e.keyCode===13 && e.ctrlKey) this.showMessage()
 },
 componentDidMount(){
 document.addEventListener('keydown',this.keydownHandler);
 },
 componentWillUnmount(){
 document.removeEventListener('keydown',this.keydownHandler);
 },
 render () {
 return (
 <div>
 <h1>Press Ctrl+Enter</h1>
 <button onClick={this.showMessage}>Hit</button>
 </div>`
 );
 }
});
export default App;
BSMP
4,9108 gold badges36 silver badges46 bronze badges
answered Sep 6, 2016 at 18:48
Sign up to request clarification or add additional context in comments.

2 Comments

Perfect. Just added it to my project and it works great. Thanks!
keyCode is now deprecated. Use e.key === 'Enter' && e.ctrlKey instead.
9

Can also be done using functional components too

export function App() {
 const showMessage = () => {
 alert('SOME MESSAGE');
 };
 const keydownHandler = (e) => {
 if(e.key === 'Enter' && e.ctrlKey) showMessage()
 };
 React.useEffect(() => {
 document.addEventListener('keydown', keydownHandler);
 return () => {
 document.removeEventListener('keydown', keydownHandler);
 }
 }, []);
 return (
 <div>
 <h1>Press Ctrl+Enter</h1>
 <button onClick={showMessage}>Hit</button>
 </div>
 );
}
Daniel Liuzzi
17.3k8 gold badges55 silver badges57 bronze badges
answered Nov 3, 2022 at 13:07

Comments

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.