All language subtitles for 009 Working with Multiple States_en

af Afrikaans
sq Albanian
am Amharic
ar Arabic Download
hy Armenian
az Azerbaijani
eu Basque
be Belarusian
bn Bengali
bs Bosnian
bg Bulgarian
ca Catalan
ceb Cebuano
ny Chichewa
zh-CN Chinese (Simplified)
zh-TW Chinese (Traditional)
co Corsican
hr Croatian
cs Czech
da Danish
nl Dutch
en English
eo Esperanto
et Estonian
tl Filipino
fi Finnish
fr French
fy Frisian
gl Galician
ka Georgian
de German
el Greek
gu Gujarati
ht Haitian Creole
ha Hausa
haw Hawaiian
iw Hebrew
hi Hindi
hmn Hmong
hu Hungarian
is Icelandic
ig Igbo
id Indonesian
ga Irish
it Italian
ja Japanese
jw Javanese
kn Kannada
kk Kazakh
km Khmer
ko Korean
ku Kurdish (Kurmanji)
ky Kyrgyz
lo Lao
la Latin
lv Latvian
lt Lithuanian
lb Luxembourgish
mk Macedonian
mg Malagasy
ms Malay
ml Malayalam
mt Maltese
mi Maori
mr Marathi
mn Mongolian
my Myanmar (Burmese)
ne Nepali
no Norwegian
ps Pashto
fa Persian Download
pl Polish
pt Portuguese
pa Punjabi
ro Romanian
ru Russian
sm Samoan
gd Scots Gaelic
sr Serbian
st Sesotho
sn Shona
sd Sindhi
si Sinhala
sk Slovak
sl Slovenian
so Somali
es Spanish
su Sundanese
sw Swahili
sv Swedish
tg Tajik
ta Tamil
te Telugu
th Thai
tr Turkish
uk Ukrainian
ur Urdu
uz Uzbek
vi Vietnamese
cy Welsh
xh Xhosa
yi Yiddish
yo Yoruba
zu Zulu
or Odia (Oriya)
rw Kinyarwanda
tk Turkmen
tt Tatar
ug Uyghur
Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated: 1 00:00:02,050 --> 00:00:05,360 The question now is what do we want to do 2 00:00:05,360 --> 00:00:06,620 with that value? 3 00:00:06,620 --> 00:00:07,773 What's the goal now? 4 00:00:08,620 --> 00:00:11,950 And the answer is, well, we want to make sure 5 00:00:11,950 --> 00:00:16,020 that we store it somewhere so that when later 6 00:00:16,020 --> 00:00:20,890 when the form is submitted, we can use that value. 7 00:00:20,890 --> 00:00:23,560 Because of course, we want to gather all the values 8 00:00:23,560 --> 00:00:26,030 for all inputs and then combine them 9 00:00:26,030 --> 00:00:29,163 into an object when the form overall is submitted. 10 00:00:30,040 --> 00:00:32,850 And one way of storing that value 11 00:00:32,850 --> 00:00:34,760 and making sure that it survives, 12 00:00:34,760 --> 00:00:37,770 even if that function would be re executed 13 00:00:37,770 --> 00:00:39,090 for whatever reason, 14 00:00:39,090 --> 00:00:41,260 so this component function, I mean. 15 00:00:41,260 --> 00:00:44,750 To make sure that we store the value and that it survives 16 00:00:44,750 --> 00:00:47,160 if that function would be re-executed 17 00:00:47,160 --> 00:00:50,100 and the component would be re-evaluated, 18 00:00:50,100 --> 00:00:52,660 we can again, use State. 19 00:00:52,660 --> 00:00:56,530 So we can import the useState hook from React here, 20 00:00:56,530 --> 00:00:59,730 and basically just call it here 21 00:00:59,730 --> 00:01:02,440 at the beginning of the ExpenseForm function 22 00:01:02,440 --> 00:01:06,800 and set the State for this input here, so to say. 23 00:01:06,800 --> 00:01:08,640 And initially that's an empty string 24 00:01:08,640 --> 00:01:11,120 because initially when this component is rendered 25 00:01:11,120 --> 00:01:13,790 for the first time, nothing was entered, 26 00:01:13,790 --> 00:01:16,000 but then we can again, use destructuring 27 00:01:16,000 --> 00:01:18,450 to get our two elements, 28 00:01:18,450 --> 00:01:20,710 which is the currently enteredTitle. 29 00:01:20,710 --> 00:01:22,380 Maybe we name it, enteredTitle 30 00:01:23,400 --> 00:01:25,830 and a function for updating the State, 31 00:01:25,830 --> 00:01:28,240 which following the convention 32 00:01:28,240 --> 00:01:30,497 should be named setEnteredTitle. 33 00:01:33,010 --> 00:01:36,380 And here, when we react to this event 34 00:01:36,380 --> 00:01:38,700 where the user enters something, 35 00:01:38,700 --> 00:01:41,450 we can't just call setEnteredTitle 36 00:01:41,450 --> 00:01:43,630 and pass events target value. 37 00:01:43,630 --> 00:01:47,030 So the currently entered value as a parameter, 38 00:01:47,030 --> 00:01:49,263 as argument, to setEnteredTitle. 39 00:01:51,300 --> 00:01:54,420 And therefore this will be stored in our State. 40 00:01:54,420 --> 00:01:58,300 Now, here I'm not really doing it to update this component 41 00:01:58,300 --> 00:02:00,230 though the component will update. 42 00:02:00,230 --> 00:02:02,840 That will always happen when you update the State 43 00:02:02,840 --> 00:02:04,960 but I'm doing it to ensure that we're storing 44 00:02:04,960 --> 00:02:07,970 this in some variable, which is kind of detached 45 00:02:07,970 --> 00:02:10,850 from the life cycle of this component function. 46 00:02:10,850 --> 00:02:13,270 So that no matter how often this component function 47 00:02:13,270 --> 00:02:17,833 might execute again, this State is stored and survives. 48 00:02:18,760 --> 00:02:20,980 There would be other ways of solving this as well 49 00:02:20,980 --> 00:02:22,750 but that works just fine. 50 00:02:22,750 --> 00:02:24,480 And it has another advantage 51 00:02:24,480 --> 00:02:27,140 because we'll need that State for updating 52 00:02:27,140 --> 00:02:30,513 and for re-rendering that component later anyways. 53 00:02:31,690 --> 00:02:35,270 But for the moment we just use a to safe to value. 54 00:02:35,270 --> 00:02:37,870 Now we can do the same for the other two inputs. 55 00:02:37,870 --> 00:02:41,200 And of course, definitely try this on your own as well. 56 00:02:41,200 --> 00:02:43,560 Pause the video and make sure you listen 57 00:02:43,560 --> 00:02:46,590 to these change events for the other inputs as well 58 00:02:46,590 --> 00:02:51,590 and that you also store State for those changes. 59 00:02:51,640 --> 00:02:53,630 So here's your chance to pause the video, 60 00:02:53,630 --> 00:02:56,193 thereafter, we'll implement this together. 61 00:02:59,330 --> 00:03:01,370 So, did you add that? 62 00:03:01,370 --> 00:03:02,620 Let's now do it together. 63 00:03:03,610 --> 00:03:06,260 And I'll start by adding a new function 64 00:03:06,260 --> 00:03:09,510 and that will be the amountChangeHandler. 65 00:03:09,510 --> 00:03:13,110 And the logic is basically the same as before. 66 00:03:13,110 --> 00:03:13,970 I want to make sure 67 00:03:13,970 --> 00:03:15,680 that this function gets triggered 68 00:03:15,680 --> 00:03:17,900 whenever the amount changes. 69 00:03:17,900 --> 00:03:21,210 So on the amount input, we can add a onChange prop 70 00:03:21,210 --> 00:03:24,453 and point at the amountChangeHandler, just like that. 71 00:03:25,820 --> 00:03:28,270 And before I add any code in there, 72 00:03:28,270 --> 00:03:30,790 I will already add the third function 73 00:03:30,790 --> 00:03:34,067 for my dateChangeHandler, like this 74 00:03:36,346 --> 00:03:39,539 and that should be triggered whenever the date changed. 75 00:03:39,539 --> 00:03:41,990 So here I always listened to onChange 76 00:03:41,990 --> 00:03:43,740 and point at the dateChangeHandler. 77 00:03:46,930 --> 00:03:49,540 So now all these inputs are wired up 78 00:03:49,540 --> 00:03:52,540 but of course at the moment nothing is happening here. 79 00:03:52,540 --> 00:03:53,800 Now I also of course 80 00:03:53,800 --> 00:03:56,480 want to store State for changes made here. 81 00:03:56,480 --> 00:03:59,000 And that brings up one important question. 82 00:03:59,000 --> 00:04:01,440 Maybe a problem you also encountered, 83 00:04:01,440 --> 00:04:04,870 how can you manage more than one State? 84 00:04:04,870 --> 00:04:07,630 It is something we have learned up to this point 85 00:04:07,630 --> 00:04:10,490 but it turns out that it is rather simple. 86 00:04:10,490 --> 00:04:13,570 You can call useState more than once. 87 00:04:13,570 --> 00:04:16,630 Maybe you tried that and if you did good job, 88 00:04:16,630 --> 00:04:18,470 because you can do that. 89 00:04:18,470 --> 00:04:22,540 You can have multiple States, multiple States slices 90 00:04:22,540 --> 00:04:25,820 or State pieces per component. 91 00:04:25,820 --> 00:04:29,490 And all of these States inside of one at the same component 92 00:04:29,490 --> 00:04:32,593 will then all to be totally separated from each other. 93 00:04:33,740 --> 00:04:36,150 So you're all called useState again 94 00:04:36,150 --> 00:04:38,440 and extract my enteredAmount 95 00:04:38,440 --> 00:04:43,440 and my setEnteredAmount function with RAD structuring. 96 00:04:44,510 --> 00:04:46,720 And now we've got these two pieces of State 97 00:04:46,720 --> 00:04:48,770 which belong to this component 98 00:04:48,770 --> 00:04:52,200 and we can update and read them individually. 99 00:04:52,200 --> 00:04:54,870 So they work in a totally separated way. 100 00:04:54,870 --> 00:04:56,310 When I update the amount, 101 00:04:56,310 --> 00:04:59,603 this will not affect the title and vice versa. 102 00:05:00,930 --> 00:05:02,460 So for the amountChangeHandler, 103 00:05:02,460 --> 00:05:04,437 we can call setEnteredAmount 104 00:05:05,740 --> 00:05:10,523 and pass in event target value here as well. 105 00:05:11,360 --> 00:05:15,140 Well, and unsurprisingly, we can do the same for the date. 106 00:05:15,140 --> 00:05:16,540 Call useState again 107 00:05:16,540 --> 00:05:18,900 and store an empty string here as well. 108 00:05:18,900 --> 00:05:21,240 By the way, I'm storing strings all the time 109 00:05:21,240 --> 00:05:24,370 and not a number here for the amount, for example, 110 00:05:24,370 --> 00:05:27,440 because by default, whenever you listen to the change event 111 00:05:27,440 --> 00:05:32,000 for an input, if you read the value of that input element, 112 00:05:32,000 --> 00:05:34,030 it'll always be a string. 113 00:05:34,030 --> 00:05:35,600 Even if it stores a number 114 00:05:35,600 --> 00:05:38,970 it will be a number as a string and the same for the date. 115 00:05:38,970 --> 00:05:40,610 So we always get a string here. 116 00:05:40,610 --> 00:05:44,143 That's why I also initialize all States with a string. 117 00:05:45,200 --> 00:05:48,830 And here, therefore, for this third State, 118 00:05:48,830 --> 00:05:51,577 I have my enteredDate and setEnteredDate. 119 00:05:53,240 --> 00:05:57,000 And I now also can update this State here 120 00:05:57,000 --> 00:06:02,000 with setEnteredDate events target value, like this. 121 00:06:05,660 --> 00:06:06,720 Okay. 122 00:06:06,720 --> 00:06:09,440 Now we got these three State slices 123 00:06:09,440 --> 00:06:11,700 and this is really important. 124 00:06:11,700 --> 00:06:14,090 This is absolutely okay 125 00:06:14,090 --> 00:06:16,170 and you will see that quite a lot, 126 00:06:16,170 --> 00:06:19,020 that you have more than one State per component. 127 00:06:19,020 --> 00:06:23,000 You can have these separate States and update them 128 00:06:23,000 --> 00:06:25,650 separately and manage them separately. 129 00:06:25,650 --> 00:06:29,320 That is a key part of this entire State concept 130 00:06:29,320 --> 00:06:31,100 React ships with. 131 00:06:31,100 --> 00:06:34,420 You can, and you often will have multiple States 132 00:06:34,420 --> 00:06:35,660 per component. 133 00:06:35,660 --> 00:06:38,080 Nonetheless, this multiple States 134 00:06:38,080 --> 00:06:40,820 verses one State thing is a concept 135 00:06:40,820 --> 00:06:42,493 I wanna take a closer look at. 10590

Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.