• 封装个函数,使用hook语法, 导出一个函数
    1. import React, { useState, useEffect } from 'react';
    2. const useKeyPress = (targetKeyCode) => {
    3. const [keyPressed, setKeyPressed] = useState(false)
    4. const keyDownHandler = ({keyCode}) => {
    5. if (keyCode === targetKeyCode) {
    6. setKeyPressed(true)
    7. }
    8. }
    9. const keyUpHandler = ({keyCode}) => {
    10. if (keyCode === targetKeyCode) {
    11. setKeyPressed(false)
    12. }
    13. }
    14. useEffect(() => {
    15. document.addEventListener('keydown', keyDownHandler)
    16. document.addEventListener('keyup', keyUpHandler)
    17. return () => {
    18. document.removeEventListener('keydown', keyDownHandler)
    19. document.removeEventListener('keyup', keyUpHandler)
    20. }
    21. // eslint-disable-next-line react-hooks/exhaustive-deps
    22. }, []) // 只在第一次加载触发
    23. return keyPressed
    24. }
    25. export default useKeyPress