@@ -4,6 +4,7 @@ title: useKeyPress
4
4
date : " 2018-11-14"
5
5
gist : https://gist.github.com/gragland/b61b8f46114edbcf2a9e4bd5eb9f47f5
6
6
sandbox : https://codesandbox.io/s/5v71vl72kk
7
+ isMultilingual : true
7
8
tags : []
8
9
links :
9
10
- url : https://codesandbox.io/s/y3qzyr3lrz
@@ -65,3 +66,54 @@ function useKeyPress(targetKey) {
65
66
return keyPressed;
66
67
}
67
68
```
69
+
70
+ ``` typescript
71
+ import { useState , useEffect } from " react" ;
72
+ // Usage
73
+ function App() {
74
+ // Call our hook for each key that we'd like to monitor
75
+ const happyPress: boolean = useKeyPress (" h" );
76
+ const sadPress: boolean = useKeyPress (" s" );
77
+ const robotPress: boolean = useKeyPress (" r" );
78
+ const foxPress: boolean = useKeyPress (" f" );
79
+ return (
80
+ <div >
81
+ <div >h , s , r , f < / div >
82
+ <div >
83
+ {happyPress && "😊"}
84
+ {sadPress && "😢"}
85
+ {robotPress && "🤖"}
86
+ {foxPress && "🦊"}
87
+ < / div >
88
+ < / div >
89
+ );
90
+ }
91
+ // Hook
92
+ function useKeyPress(targetKey : string ): boolean {
93
+ // State for keeping track of whether key is pressed
94
+ const [keyPressed, setKeyPressed] = useState (false );
95
+ // If pressed key is our target key then set to true
96
+ function downHandler({ key }): void {
97
+ if (key === targetKey ) {
98
+ setKeyPressed (true );
99
+ }
100
+ }
101
+ // If released key is our target key then set to false
102
+ const upHandler = ({ key }): void => {
103
+ if (key === targetKey ) {
104
+ setKeyPressed (false );
105
+ }
106
+ };
107
+ // Add event listeners
108
+ useEffect (() => {
109
+ window .addEventListener (" keydown" , downHandler );
110
+ window .addEventListener (" keyup" , upHandler );
111
+ // Remove event listeners on cleanup
112
+ return () => {
113
+ window .removeEventListener (" keydown" , downHandler );
114
+ window .removeEventListener (" keyup" , upHandler );
115
+ };
116
+ }, []); // Empty array ensures that effect is only run on mount and unmount
117
+ return keyPressed ;
118
+ }
119
+ ```
0 commit comments