Lifecycle Methods

3 minutes
Share the link to this page
Copied
  Completed
You need to have access to the item to view this lesson.
One-time Fee
$69.99
List Price:  $99.99
You save:  $30
€65.43
List Price:  €93.47
You save:  €28.04
£55.38
List Price:  £79.12
You save:  £23.73
CA$95.75
List Price:  CA$136.80
You save:  CA$41.04
A$107.11
List Price:  A$153.03
You save:  A$45.91
S$95.36
List Price:  S$136.24
You save:  S$40.87
HK$547.90
List Price:  HK$782.75
You save:  HK$234.85
CHF 63.27
List Price:  CHF 90.39
You save:  CHF 27.12
NOK kr772.60
List Price:  NOK kr1,103.76
You save:  NOK kr331.16
DKK kr487.88
List Price:  DKK kr697.01
You save:  DKK kr209.12
NZ$117.84
List Price:  NZ$168.36
You save:  NZ$50.51
د.إ257.06
List Price:  د.إ367.25
You save:  د.إ110.18
৳7,700.43
List Price:  ৳11,001.09
You save:  ৳3,300.65
₹5,837.33
List Price:  ₹8,339.41
You save:  ₹2,502.07
RM333.67
List Price:  RM476.70
You save:  RM143.02
₦92,489.99
List Price:  ₦132,134.22
You save:  ₦39,644.23
₨19,533.24
List Price:  ₨27,905.82
You save:  ₨8,372.58
฿2,588.46
List Price:  ฿3,697.97
You save:  ฿1,109.50
₺2,275.23
List Price:  ₺3,250.47
You save:  ₺975.23
B$358.08
List Price:  B$511.57
You save:  B$153.48
R1,314.42
List Price:  R1,877.82
You save:  R563.40
Лв127.95
List Price:  Лв182.79
You save:  Лв54.84
₩96,452.39
List Price:  ₩137,795.03
You save:  ₩41,342.64
₪267.23
List Price:  ₪381.78
You save:  ₪114.54
₱4,034.64
List Price:  ₱5,764.02
You save:  ₱1,729.38
¥11,065.06
List Price:  ¥15,807.91
You save:  ¥4,742.85
MX$1,201.03
List Price:  MX$1,715.83
You save:  MX$514.80
QR255.83
List Price:  QR365.49
You save:  QR109.65
P965.79
List Price:  P1,379.76
You save:  P413.97
KSh9,296.24
List Price:  KSh13,280.92
You save:  KSh3,984.67
E£3,349.82
List Price:  E£4,785.67
You save:  E£1,435.84
ብር4,026.64
List Price:  ብር5,752.60
You save:  ብር1,725.95
Kz58,375.85
List Price:  Kz83,397.65
You save:  Kz25,021.80
CLP$66,628.33
List Price:  CLP$95,187.41
You save:  CLP$28,559.08
CN¥507.11
List Price:  CN¥724.48
You save:  CN¥217.36
RD$4,113.13
List Price:  RD$5,876.15
You save:  RD$1,763.02
DA9,393.54
List Price:  DA13,419.92
You save:  DA4,026.38
FJ$158.35
List Price:  FJ$226.22
You save:  FJ$67.87
Q545.71
List Price:  Q779.62
You save:  Q233.91
GY$14,678.83
List Price:  GY$20,970.66
You save:  GY$6,291.82
ISK kr9,808.34
List Price:  ISK kr14,012.52
You save:  ISK kr4,204.17
DH708.72
List Price:  DH1,012.51
You save:  DH303.78
L1,243.72
List Price:  L1,776.81
You save:  L533.09
ден4,025.16
List Price:  ден5,750.48
You save:  ден1,725.31
MOP$565.76
List Price:  MOP$808.27
You save:  MOP$242.50
N$1,323.80
List Price:  N$1,891.23
You save:  N$567.42
C$2,582.07
List Price:  C$3,688.83
You save:  C$1,106.76
रु9,353.99
List Price:  रु13,363.42
You save:  रु4,009.42
S/263.57
List Price:  S/376.55
You save:  S/112.97
K270.82
List Price:  K386.91
You save:  K116.08
SAR262.49
List Price:  SAR375
You save:  SAR112.51
ZK1,859.31
List Price:  ZK2,656.27
You save:  ZK796.96
L325.94
List Price:  L465.65
You save:  L139.71
Kč1,644.39
List Price:  Kč2,349.23
You save:  Kč704.84
Ft25,663.75
List Price:  Ft36,664.08
You save:  Ft11,000.32
SEK kr762.14
List Price:  SEK kr1,088.81
You save:  SEK kr326.67
ARS$61,304.48
List Price:  ARS$87,581.58
You save:  ARS$26,277.10
Bs486.59
List Price:  Bs695.16
You save:  Bs208.56
COP$277,527.04
List Price:  COP$396,484.19
You save:  COP$118,957.15
₡35,650.64
List Price:  ₡50,931.67
You save:  ₡15,281.02
L1,732.56
List Price:  L2,475.19
You save:  L742.63
₲522,432.19
List Price:  ₲746,363.69
You save:  ₲223,931.50
$U2,704.33
List Price:  $U3,863.50
You save:  $U1,159.16
zł282.07
List Price:  zł402.98
You save:  zł120.90
Already have an account? Log In

Transcript

In this lesson, I'm going to introduce reacts lifecycle methods. But before I do that, let's do a quick recap. In the previous lesson, we hooked up our button to display a new joke every time it was clicked. But when our app first loads, our screen looks pretty bare. So I'm going to go ahead and add some new functionality that will fetch and display a joke right when the app loads up. So how do we do that?

For this, we'll be leveraging reacts component lifecycle methods. These methods provide hooks that allow you to execute your own logic when a corresponding event occurs in a component. In our case, we want to fetch a job before app component is rendered to the screen. This is a perfect use case for react component did mount lifecycle method. If we have a look at the official react docs, it says component did mount is invoked immediately after a component is mounted. And it also says if you need to load data from a remote endpoint, this is a good place to instantiate the network request, which is exactly what we were doing with our fetch joke.

So I think this is a perfect fit for our scenario. So let's go ahead and add a component did mount method to our app component Now we could just copy the contents of our untell Joe click handler into component did mount like so. And that would work fine. But it creates a whole lot of duplication, which isn't great. Instead, I'm going to copy this logic into a new method and call it fetch joke. And now I'll update both component did mount and on tell jokes to both call fetch joke instead.

With that change of joke is fetch when the app component mounts, which means if I refresh the page, I should see a joke rendered on the page right away. And there we go. When making asynchronous network requests, like our fetch Jo call, it's good to think about what a user sees while that request is loading. My connection is pretty fast. So the time between me clicking the joke button and actually seeing the joke is pretty quick. But what about those users on a slower connection?

What will they see? I'm going to go ahead and simulate a slower connection using Chrome Dev Tools. With a slow connection, you can see that the user has to wait quite a while before they see a joke appear on screen. And during that time, the user has no indication of what's going on. That doesn't make sense. A great user experience.

So let's go ahead and improve that. First thing I'm going to do is create a new state variable named is fetching joke. This will be used to track when a joke is being fetched. And by default, I'm gonna go ahead and set it to false. A joke will start fetching as soon as fetch joke is called. So I'm going to add a set state call right at the start this method, and set is fetching job to true.

A job is considered done fetching when we receive a response from the job API, which happens right here. And since we're already calling set state here, I'm just going to go ahead and has its fetching job and set it to false. To test that it's working as expected, I'm going to render the value of his fetching job to screen. Since is fetching joke is a boolean value I'm going to call to string on it which will allow us to render the value of the screen. Now when I click the button, you can see that the is fetching value is set to true. And once the joke is returned, it's fetching goes back to false.

The first improvement I want to make is to have our job button disabled while joke is being fetched. This will prevent the user from clicking on the button again if we're already fetching a joke To get this working we'll use the buttons disabled attribute, and set the value equal to our new is fetching joke state value. Now whenever a joke is being fetched, the button will automatically be disabled, and then re enabled when fetching is complete. Another improvement we can make is adding better messaging for the user while a joke is being fetched. Currently, we still just show the old joke. Instead, I'd like to show a loading joke message for the user.

To accomplish this, we're going to use a conditional expression, the condition will be if it's fetching joke is true, then render the loading message. And if it's false, render the joke like we're doing now. While we're at it, let's go ahead and remove our is fetching joke label as we don't need it anymore. Okay, let's go ahead and test it out. Now we can see that whenever a joke is being fetched, we get this nice loading message that lets us know that something is happening. This is a big improvement for those users that may be using a slower connection and next up, we'll be looking at enhancing what we've done here by adding a form for our search.

Sign Up

Share

Share with friends, get 20% off
Invite your friends to LearnDesk learning marketplace. For each purchase they make, you get 20% off (upto $10) on your next purchase.