חידת ריאקט: פוקוס
25/06/2021
דוגמת הקוד הבאה ב React אמורה להציג 4 תיבות קלט וכל פעם שמקלידים טקסט באחת התיבות להעביר את הפוקוס לתיבה הבאה. זה לא קורה ואני חייב להודות שלקח לי כמה דקות טובות להבין למה. נסו אתם ותראו אם אתם מוצאים את זה יותר מהר:
import "./styles.css";
import React, { useRef, useState } from "react";
export default function Targil1(props) {
const inputCount = 4;
const [inputsText, setInputsText] = useState(new Array(inputCount).fill(""));
const inputsRef = [];
for (let i = 0; i < inputCount; i++) {
inputsRef.push(useRef(null));
}
const containerDiv = {
display: "flex"
};
function ChangeValueAndFocus(index, e) {
inputsText[index] += e.key;
inputsRef[(index + 1) % inputCount].current.focus();
setInputsText([...inputsText]);
}
return (
<div style={containerDiv}>
{inputsText.map((item, index) => (
<input
value={item}
key={index}
autoFocus={index === 0 ? true : false}
ref={inputsRef[index]}
onKeyPress={(e) => ChangeValueAndFocus(index, e)}
/>
))}
</div>
);
}
וזה בקודסנדבוקס: https://codesandbox.io/s/tender-curie-ux3g5?file=/src/App.js