⊗jsrtPmCoLSU 95 of 112 menu

Издигане на състояния в React

Често няколко компонента трябва да отразяват едни и същи променящи се данни. В React се препоръчва общото състояние да се издига до най-близкия общ родител. Нека да разгледаме един пример.

Да приемем, че искаме да направим калкулатор за температурата на водата. Той ще представлява поле за въвеждане, в което потребителят ще въвежда температурата, и параграф, в който ще се извежда вердикт: водата е течна, водата е твърда, водата е газообразна.

Да приемем, че нашият калкулатор представлява контейнерен компонент Calculator:

function Calculator() { return <div> </div>; }

Нека изнесем полето за въвеждане на температурата в компонент TempInp, а параграфа с вердикта - в компонент Verdict:

function Calculator() { return <div> <Verdict /> <TempInp /> </div>; }

Лесно е да се разбере, че както TempInp, така и Verdict трябва да имат състояние с температурата. В същото време е логично, че това трябва да е една и съща температура: докато се въвеждат данни в полето, трябва да се показва вердиктът.

В такъв случай се препоръчва да се използва прием, наречен издигане на състоянието: състоянието, общо за два (или повече) компонента, се издига нагоре до техния общ родител.

В нашия случай ще се получи, че състоянието с температурата трябва да принадлежи на компонента Calculator, който ще го предава на TempInp и Verdict като пропсове:

function Calculator() { const [temp, setTemp] = useState(0); return <div> <Verdict temp={temp} /> <TempInp temp={temp} /> </div>; }

В компонента TempInp трябва да има поле за въвеждане за промяна на температурата. Но, тъй като тази температура е пропс на този компонент, то директно в TempInp не може да се променя. Правилно би било от компонента Calculator да се предаде специална функция за промяна на температурата:

function Calculator() { const [temp, setTemp] = useState(0); function changeTemp(event) { setTemp(event.target.value); } return <div> <Verdict temp={temp} /> <TempInp temp={temp} changeTemp={changeTemp} /> </div>; }

Може, между другото, да не се въвежда нова функция, а да се предаде на дъщерния компонент функцията setTemp:

function Calculator() { const [temp, setTemp] = useState(0); return <div> <Verdict temp={temp} /> <TempInp temp={temp} setTemp={setTemp} /> </div>; }

Напишете реализация на компонентите TempInp и Verdict.

Измислете 3 задачи, в които трябва да се използва издигане на състоянието. Напишете решения на тези задачи.

Български
AfrikaansAzərbaycanবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне