⊗jsrtPmCoTOS 96 of 112 menu

Jedno źródło prawdy w React

Dla wszystkich zmiennych danych w aplikacji React powinno istnieć jedno źródło prawdy. Oznacza to, że jeśli masz dwa stany i jeden stan może być obliczony na podstawie drugiego - to znaczy, że jeden z stanów jest zbędny i należy go usunąć.

Omówmy to na przykładzie. Załóżmy, że masz, na przykład, dwa pola wprowadzania: w pierwszym wprowadzana jest temperatura w stopniach Fahrenheita, a w drugim - w stopniach Celsjusza. Jednocześnie chcemy, aby oba pola były zsynchronizowane: po wprowadzeniu temperatury w jednym polu, powinna się ona odpowiednio zmienić w drugim.

Błędnym podejściem byłoby wprowadzenie dwóch stanów: jeden dla temperatury w Fahrenheitach, a drugi - w Celsiuszach. Dlaczego jest to nieprawidłowe: ponieważ jedna temperatura jest obliczana na podstawie drugiej, a zatem jako miejsce przechowywania danych powinien służyć jeden stan.

Napisz realizację opisanego zadania.

Pewien programista napisał kod wyświetlający sumę elementów tablicy:

function getSum(arr) { let res = 0; for (let elem of arr) { res += +elem; } return res; } function Calculator() { const [value, setValue] = useState(''); const [nums, setNums] = useState([1, 2, 3]); const [sum, setSum] = useState(6); // suma elementów tablicy nums function handleChange(event) { setValue(event.target.value); } function handleBlur(event) { setNums([...nums, event.target.value]); // dodajemy element do tablicy setSum(getSum([...nums, event.target.value])); // obliczamy sumę na nowo } return <div> <p>{sum}</p> <input value={value} onChange={handleChange} onBlur={handleBlur} /> </div>; }

Co jest nie tak z tym kodem? Popraw go.

Pewien programista napisał kod do edycji elementów tablicy:

function App() { const [notes, setNotes] = useState([1, 2, 3, 4, 5]); const [editNum, setEditNum] = useState(null); const [value, setValue] = useState(''); const result = notes.map((note, index) => { return <p key={index} onClick={() => startEdit(index)}> {note} </p>; }); function startEdit(index) { setEditNum(index); setValue(notes[index]); // wpisujemy tekst edytowanego elementu do oddzielnego stanu } function changeItem(event) { setValue(event.target.value); setNotes([...notes.slice(0, editNum), event.target.value,...notes.slice(editNum + 1)]); } return <div> {result} <input value={value} onChange={changeItem} /> </div>; }

Co jest nie tak z tym kodem? Popraw go.

Polski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wykorzystujemy pliki cookie do działania strony, analizy i personalizacji. Przetwarzanie danych odbywa się zgodnie z Polityką prywatności.
zaakceptuj wszystkie dostosuj odrzuć