SearchForm Component

4 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

Next up on a task list is creating a search form component. As far we've been doing all our work in a single component, or app component. In react, you don't want a single component to be handling too much. Just like functions. If you find a component is doing too much, it's usually a good sign that it can be broken into smaller components. Having a look at our app component, I think the search form is a good candidate to be broken out into its own component.

Let's start by creating a new file named search form dot j s. For now search form will be a bare bones functional component that returns an h1 containing a greeting. This will be a temporary placeholder until we move the form element over from the app component. It's also a common pattern that the default export from a component file will be the component itself, which is the pattern we'll be following. In order to use the search form component from app you'll need to import it like you would any other file next lesson component to the render method and see if it works. Nice, we can see our component rendering, but it's not doing a whole lot. Let's copy the search form from app into the search form component file.

Once we save this, we can expect to see some errors as we're still referencing methods and state from the app component. The first error we get is can't read property on search submit of undefined. This is because the answered submit method is referenced in our app component. So how do we access methods in the app component from the search form component? This is where props are your friend. Let's go back to the app component.

Let's add a new prop to the search forum named on form Submit. And what we'll do is pass apps reference to answer submit as the value of the on form submit prop. Now back in search form, instead of calling on search submit, we will access the components props and use the new on form submit prop instead. Which Don't forget is a reference to the answer submit method in app. Now when we save we can see that the answer submitted Gone, but now we have a new error, but this time it's complaining about on search change being undefined. Similar to before, I'm going to start by adding a new property search form named on search value change, and then pass apps reference to answers change as the value.

Then back in our search form, we'll call the on search value change prop in place of the answers change. Now when we save the air is replaced with a new one complaining that the state is undefined. By now you should know the routine, I'll add a new property search form named is searching and pass the is fetching joke state as the value. While I'm at it, I'm going to polarize the name to is fetching jokes since we're now fetching more than one joke and back in search form a place the reference to his fetching joke with his searching prop. Also, I just noticed we only disable the I'm feeling lucky button when a searching is true. We should be doing the same for the search button.

So let's add the disabled prop there as well. Well, it looks like that we fixed the errors but I can see that we're still referencing search jokes from the I'm feeling funny button If I go ahead and Click on it, you can see that we get an error cannot read property search jokes of undefined. This appears to be your last leftover reference to the app component. So let's go ahead and fix it. I'm going to start by copying the existing onClick value as we will be needing it. Then I'm going to add yet another property search form named on single search click for the value I'll paste in the onClick value I copied over before.

Now in search form, we'll use the on single search click prop instead. Not save and see how things are looking. OK, looks like the I'm feeling funny button is working again. The search is looking good as well. Now that everything's working again, let's have a closer look at the new component we created. The render method looks much more tidy now with all the former logic hidden away in the search form component.

Another added bonus is the search form component doesn't handle any data on its own anymore. All references to data are handled through props and callbacks. You may have noticed I've been keeping my prop names as generic as possible. Not having your prop names tightly coupled to your data makes your component more versatile. This way if we end up changing our app to search something other than jokes, we don't have to rename any of our search form problems. This type of component is sometimes referred to as a dumb or presentational component in the React community.

These components don't care what type of data is being passed to them, they're only concerned with how they look. This creates a component that is much easier to reuse. For example, if we wanted our search form to search for something other than jokes, we just have to update the props and callbacks to pass in different data instead of creating a whole nother component. With a search form component complete, we can cross that one off our list. Next up we'll be doing some refactoring and cleanup

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.