Container-presentational sample in React – why and methods to use

Hooks this, hooks that – it appears that evidently the entire React growth today is all about hooks. However maybe the nice ol’ containers will not be a misplaced trigger solely? On this article, I’m going to point out you why the container-presentational sample continues to be viable and will even work in tandem with hooks for the very best outcome when it comes to efficiency, readability, and reusability.

Containers will not be the most well liked subject on the planet proper now – even on the planet of React. However there’s nonetheless an excellent case to be made for his or her use in 2023. In right this moment’s article, you’re going to search out out:

  • what’s the container-presentational sample and when to make use of it,
  • the way it precisely works (I’m even going to make a very cool little app that includes Rick and Morty!),
  • what the principle advantages of the container-presentational sample on each single developer and crew stage are,
  • the way it all pertains to the ever-present React hooks.

So what’s the take care of the React containers?

Container elements in React – are they nonetheless related?

The second you noticed the article’s title, you might need thought one thing like: what’s the purpose of utilizing containers if I can simply break down all of the app logic into hooks?

The introduction of hooks by Fb has fully modified the way in which React app growth works. Hooks made it doable to make use of practical elements instead of class elements.

Practical elements are simpler to put in writing and perceive than class elements. And if this wasn’t sufficiently engaging, they’re additionally extra environment friendly! No marvel so many devs swear by them in addition to custom-made hooks!

A properly-written {custom} hook can transfer a big chunk of enterprise logic and UI from the part to an abstraction layer. That’s a giant a part of why the code is really easy to learn and keep. However it could ultimately develop too large for the hook to be a adequate organizational tool. That’s the place containers are available in.

Certain, you may need to separate your small business logic utilizing hooks solely. And in case you are cautious, it would even work. However as a result of hooks can be utilized for logic and presentation, mixing them in is just a little too straightforward. What containers provide is a transparent distinction. And it actually does matter in the long term. 

Container elements have a tendency to essentially make a distinction in massive React apps. By combining separate container elements with {custom} hooks, you may present correct encapsulation and logic reusability in a approach that’s scalable and meets all the perfect practices of programming.

As a way to perceive why it issues a lot that you don’t combine logic and presentation in the identical part, I’m going to current the container-presentational design sample.

However earlier than I get to the sample itself, I’m going to briefly look at the subject of React design patterns. It’ll make the remaining a lot simpler to grasp.

A developer explains: React lifecycle strategies & hooks

Design patterns in React

Very like some other software program device you may consider, every React design sample exists to unravel very particular growth issues.

Plenty of React growth challenges are pretty widespread and there’s no level in making an attempt to reinvent the wheel each time.

The patterns present generic and reusable options to those challenges. They generalize and summary away the problem. They’re correctly examined and documented in order that they are often utilized to totally different contexts.

React design patterns advantages

When used correctly, such design patterns provide numerous advantages:

  • Code standardization – when all of the code is written and arranged in accordance with a given sample, it’s predictable and straightforward to learn for everybody.
  • Time saving – so long as one is aware of the patterns used, one can simply perceive the complete software. This understanding is transferable to every subsequent app constructed the identical approach.
  • Code upkeep – separation of considerations and encapsulation implies that testers know precisely the place to seek for a given bug, even because the app grows greater and larger.

All of it sounds nice, however earlier than you may actually really feel all the advantages, you typically want to take a position numerous effort and time in an effort to really grasp a given React design sample in order that you’ll be able to recreate it in several conditions.

And right here comes the one you’re been itching to study extra about…

The container-presentational sample

The React design sample is all about separating the enterprise logic from the presentational layer, or in case you’d fairly: container elements from the presentational elements.

Container elements

These elements create and keep information, pushing it additional to their little one elements. They include no UI components. Their major aim is to ship information and enterprise logic to presentational elements. It’s a co-called good part as a result of it takes care of all of the interior workings of the app within the background. Apart of good elements, we even have…

Presentational elements

Their job is to make presentational information obtainable to the UI. This information is first handed by their dad or mum elements. Parts akin to this may be described as dumb elements as a result of they don’t do something all by themselves. They usually don’t have a neighborhood state until they want it to show the UI in a particular approach.

The container-presentational sample made up of each presentational elements and container elements is summary sufficient to search out use throughout many various frontend frameworks apart from React, together with Angular and Vue.js.

Advantages of the container-presentational sample

What distinction does a code group like this actually make? To be completely trustworthy, it could possibly make all of the distinction, setting the app on a path of environment friendly and scalable progress over a very long time. However to call only a few:

Elevated readability

The Single Accountability Precept (SRP) stipulated that every class ought to solely have one duty. On this case, the container part takes care of the enterprise logic, whereas the presentational part shows information. The sample itself helps implement that distinction. Code written like that is centered and concise, enhancing readability, which can come in useful throughout the onboarding of latest devs to your venture. This high quality additionally makes it simpler to realize the remaining advantages.

Elevated reusability 

Impartial elements are extra reusable. While you create elements this fashion, you may typically save time when engaged on bigger programs. The bigger it’s, the extra of a distinction it makes.

Improved modularity and scalability

When the sample is utilized, it’s straightforward so as to add and take away presentational elements with out affecting the app logic and states. It permits for constructing them in isolation, retaining observe of their model and consistency. That’s what frontend instruments akin to Storybook had been made for.

Simple testing

Remoted presentational elements are inclined to have a fairly simplistic construction. Because of this, the QA tester can simply take a look at them on a case-by-case foundation. It’s generally known as snapshot testing or atomic testing.

Storybook was an necessary a part of our frontend growth work for Synerise – along with refining present React dashboards, we helped develop a standard library for visually and technically constant reusable elements

The container-presentational sample in apply – let’s make an app!

That’s it for the idea. Now’s the time to make the promised Rick and Morty app.

Instance screenshot of the completed app

Have a look at the App.tsx file I created. The part has:

  • API information administration state,
  • information loading flag administration state,
  • API information fetching state,
  • information presentation state.

At this level, regardless that it has a few totally different states, the part continues to be fairly comprehensible. However what if I added a few API requests and presentational elements? Not solely will such a beast of a part be very sophisticated, however it is going to be very exhausting to check too.

What’s extra, geared up with so many contextual dependencies, it’s certain to lose any shred of reusability, which is likely one of the top-selling options of React.

It’s time to type all of it out. The brand new file construction might be as follows:

  • The newly-created CharacterContainer.tsx file would be the new container.
  • There might be two new presentational elements – one will include the CharacterList.tsx checklist and the opposite referred to as Character.tsx will embody a single checklist factor.

Let’s take a better take a look at CharacterContainer.tsx. It has all of the states obligatory for managing the app. It additionally fetches information and pushes it to the presentational part.

The CharacterList.tsx file accepts the info from dad or mum elements and shows a loading state in addition to a listing of characters.

The only-element Character.tsx file additionally will get its information from a dad or mum and shows it.

This model has a few main benefits over the earlier one:

  • Full separation of enterprise logic and presentational layer, making for code that’s straightforward to grasp, take a look at, and doc.
  • Excessive stage of reusability will come in useful throughout growth.

That is solely a quite simple instance – all of those professionals might be way more evident by means of the economies of scale in large industrial initiatives.

A query stays – can this code be even higher? As a way to reply it, let’s return to the difficulty of hooks.

The best way to mix containers with hooks?

React gives numerous totally different built-in hooks, together with useState, useEffect, useContext, or use Memo. These hooks are primarily capabilities that permit you to use React options akin to states in practical elements. Builders can make use of them for the aim of state administration, information processing, occasion dealing with, and lots of different React functionalities.

As a way to complement my container-presentational resolution, I’m going to construct a {custom} hook.

Customized hooks in motion

The gist of it’s this particular perform useCharacters.tsx, which takes all of the state administration and information fetching logic. It returns information and a loading flag.

With that I can use a {custom} hook in CharacterContainer.tsx.

But once more, I succeeded in separating enterprise logic from the presentation part.

How effectively have you learnt {custom} hooks? Find out about finest practices

The container-presentational sample in React – classes discovered

And that’s it for the appliance. Hopefully, by now you may see that containers nonetheless have their place on the planet of React growth and may work alongside hooks to make your growth extra environment friendly at each a person and crew stage.

To sum issues up:

  • Container-based strategy with elements is an effective solution to enhance the effectivity, scalability, and modularity of a React software. Separating enterprise logic from UI makes the code clearer whereas releasing visible elements from information sources makes them reusable.
  • For additional effectivity enhancements, you may transfer some logic from containers to {custom} hooks in addition to use hooks inside containers. By doing so, you get small items of enterprise logic, which you need to use in lots of locations on the similar time.
  • Dividing code into functionalities like that is particularly helpful in massive groups – people can work on separate functionalities in isolation.

Once more rings true the maxim that every growth problem will be solved in many various methods. A few of these methods will be higher in particular situations. As a substitute of stubbornly sticking to at least one approach of fixing an issue, select the perfect one to your case and reap brief and long-term advantages.

Are you trying to find React builders who know methods to use all of the design patterns?

Write to us and let’s discuss concerning the initiatives we made and the initiatives you need to make.

Bartosz Janiuk

Bartosz Janiuk

Frontend developer

React and TypeScript professional who enjoys creating clear and environment friendly code. Brings a strategic mindset and a focus to element to each venture. All the time hungry for information. Avid anime fan and a Counter-Strike veteran.


Leave a Reply

    Your Cart
    Your cart is emptyReturn to Shop