Add Search Form

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

Now that we have the app working well for one job, let's take things a step further. Instead of just fetching one random joke, let's give the user the ability to search for jokes. The first thing we're going to need is a form. So let's go ahead and create an empty form to start with. Next, we need somewhere for our user to input their search. So let's go ahead and add a text input with some placeholder text.

And lastly, I'll create a button labeled search that will be used to submit our form. Now that we have our form set up, or tell me a joke button is looking kind of lonely floating around out there. For now I'm going to just move it inside our form as it will be using it later on. Okay, so what's next? When working on a new feature, I find it very useful to break it down into smaller tasks. So let's go ahead and create a task list to track the work we're going to be doing for the search form.

First up is calling a search job endpoint and storing the results, then saving the user search query, then triggering the search on form Submit. After that, rendering the search results the screen then hooked me up on filling button, followed by creating the search form component, then refactoring code cleanup. And last but not least add styles to the app. Now that we have a plan, let's get started with task number one, calling the search endpoint and storing the search results. The first thing we need is a way to search for dad jokes. Lucky for us the same API we were using the fetch random dad joke also provides a search endpoint.

According to the API docs, we need to pass the search term as a query parameter, and will be returned the search results in the following format. I'm going to go ahead and copy the URL for the search endpoint. Instead of creating a new method for search. I'm going to repurpose the existing fetch job method. I'll start by changing the fetch URL to use the search endpoint I copied over from the docks. Then let's remove this as a call for now and just replace it with a call that will log the search results to the console.

Next, I want to rename the fetch joke method to something more appropriate. Since fetch joke is currently referenced in multiple places. We're going to make use of code sandboxes change all occurrences option. This allows me to quickly Replace All references of fetch job with a new name search jokes instead. Lastly, I'm going to do some cleanup and remove some unused items that are no longer being used. Okay, let's take a look at the console and see what's happening.

You can actually see that we already have a response log to the console. This is because search jokes is being called on a component did mount lifecycle method just like best joke was, you may be thinking, how are we getting search results if we haven't actually entered a search yet. If we pop over to the API Doc's again, you can see that if no search term is provided, it'll default to returning all jokes, which is what is happening in our case, nothing you may notice is that a search response contains more than just search results. In our case, we're really only interested in the array of jokes contained in the results property. For that reason, I'm going to simplify things and store the results directly in a variable called jokes. Now we can see that we were just getting an array of jokes back which will be easier to work with.

Now that we know our search calls working we need somewhere to store the results. For that, let's create a new state variables named jokes, instead of equal to an empty array to start with. Next, let's replace our console dot log call with a call the set state and pass in the jokes returned from the search. While we're at it, let's go ahead and add back our is fetching joke state and set it to false. Also, just like before, we should set its fetching joke to true when search jokes is first called. Lastly, let's remove the old joke stay variable since it's no longer being used.

And just to double check that our search results are being stored, I'm going to go ahead and render them to screen. Since jokes is an array, we would usually iterate over the data to render it. For now I'm just going to call to string on it so we can see something come up on screen. And there we go. our search results are showing I'll be there looking pretty ugly right now. Don't worry though, we'll be giving those search results much needed TLC and soon enough for now though, I think that takes care of task number one.

So I'm going to go ahead and cross that out. See isn't that satisfying? We're making some progress here. And next up is saving the user search into state

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.