Why when I’m pressing the Enter key the value of
idNumber
becomes undefined ?
If I click on the button
calling checkID()
it shows the input
‘s string length in the console.log(idNumber)
It’s just so weird
const [idNumber, setNumber] = useState(); useEffect(() => { const submit = document.getElementById('idNum'); submit.addEventListener('keyup', enterPressed); }, []); const onChangeHandler = (event) => { const isDigits = event.target.value.replace(/D/g, ''); setNumber(isDigits); }; const enterPressed = (event) => { if (event.key === 'Enter') { console.log('idNumber.length ' + idNumber.length); } }; const checkID = () => { console.log(idNumber.length) }; <input value={idNumber} id='idNum' onChange={(event) => onChangeHandler(event)} / > <button onClick={checkID}> </button>
Thanks for everyone.
Advertisement
Answer
You shouldn’t be assigning event handlers manually in React, assign onKeyPress
the same way as you assign onChange
and it works as expected:
const Comp = () => { const [idNumber, setNumber] = useState(); const onChangeHandler = (event) => { const isDigits = event.target.value.replace(/D/g, ''); setNumber(isDigits); }; const onKeyPress = (event) => { if (event.key === 'Enter') { console.log(idNumber); } }; const checkID = () => { console.log(idNumber) }; return ( <div> <input value={idNumber} id='idNum' onChange={(event) => onChangeHandler(event)} onKeyPress={(event) => onKeyPress(event)} / > <button onClick={checkID}>Btn</button> </div> ) } ReactDOM.render(<Comp />, document.getElementById("root"))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.13.0/umd/react.production.min.js" integrity="sha256-32Gmw5rBDXyMjg/73FgpukoTZdMrxuYW7tj8adbN8z4=" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.13.0/umd/react-dom.production.min.js" integrity="sha256-bjQ42ac3EN0GqK40pC9gGi/YixvKyZ24qMP/9HiGW7w=" crossorigin="anonymous"></script> <script> var { useReducer, useEffect, useState, useRef, useCallback } = React </script> <div id="root"></div>