Skip to content

Commit c2f3a9e

Browse files
authored
Merge pull request #104 from nikasepiskveradze/convert-js-to-ts
Convert useKeyPress Hook to TS
2 parents be8d132 + eacdcf3 commit c2f3a9e

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed

src/pages/useKeyPress.md

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ title: useKeyPress
44
date: "2018-11-14"
55
gist: https://gist.github.com/gragland/b61b8f46114edbcf2a9e4bd5eb9f47f5
66
sandbox: https://codesandbox.io/s/5v71vl72kk
7+
isMultilingual: true
78
tags: []
89
links:
910
- url: https://codesandbox.io/s/y3qzyr3lrz
@@ -65,3 +66,54 @@ function useKeyPress(targetKey) {
6566
return keyPressed;
6667
}
6768
```
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

Comments
 (0)