Frequently Asked Questions

Micro Frontends: Concepts & Implementation

What are micro frontends and why are they important?

Micro frontends are an architectural approach that breaks large frontend applications into smaller, manageable pieces. Each piece can be built, tested, and deployed independently by different teams, reducing complexity and improving scalability. This approach is similar to microservices in backend development and helps teams avoid high coupling, slow deployments, and coordination bottlenecks. (Source)

What are the main advantages of using micro frontends?

Micro frontends offer incremental upgrades, simple and decoupled codebases, independent deployments, and enable teams to own their deliverables end-to-end. These benefits allow for easier upgrades, faster deployments, and reduced clutter in codebases. (Source)

What are the disadvantages or tradeoffs of micro frontends?

Micro frontends require careful architectural planning. They can increase operational costs, infrastructure requirements, and lead to dependency duplication across different micro frontends. Poor management of dependencies may negatively impact user experience due to increased network calls. (Source)

How do micro frontends work in practice?

Micro frontends are typically implemented by building and deploying each component separately. At runtime, components are fetched via network calls (e.g., using JavaScript) and integrated into a common container app. This enables independent deployments and updates without rebuilding the entire application. (Source)

What is Module Federation and how does it help with micro frontends?

Module Federation is a feature in Webpack that simplifies building micro frontends by allowing components to be exposed and consumed across different apps at runtime. This enables true independent deployments and runtime integration of frontend modules. (Source)

Can you provide a practical example of implementing micro frontends?

The blog provides a step-by-step example using two apps: a Home app and a DoctorProfile app. Each app is built and run on separate ports, and Module Federation is used to expose and consume components at runtime. This demonstrates how micro frontends can be integrated for a unified user experience. (Source)

What are best practices for implementing micro frontends?

Best practices include building and deploying each frontend module separately, integrating components at runtime, managing shared state carefully, and using libraries like Redux or Mobx for observables. Good system design and clear API contracts are essential for minimizing coupling and maximizing scalability. (Source)

How can shared state be managed across micro frontends?

Shared state can be managed using libraries such as Redux, Mobx, or rxjs. The blog suggests building a separate app to manage shared state (e.g., favorites) and keeping it in sync with other micro frontend apps. (Source)

What are common misconceptions about micro frontend integration?

A common misconception is integrating micro frontend pieces at build time rather than at runtime. True micro frontend architecture requires runtime integration to enable independent deployments and updates. (Source)

How does the micro frontend approach compare to monolithic frontend architectures?

Micro frontends reduce coupling, enable independent deployments, and allow teams to use different tech stacks. Monolithic architectures require rebuilding and redeploying the entire app for any change, leading to slower development and more coordination overhead. (Source)

What tools and frameworks are recommended for building micro frontends?

Tools like Webpack's Module Federation, React, Tailwind, and libraries for state management (Redux, Mobx, rxjs) are recommended for building micro frontends. The blog provides practical examples using these technologies. (Source)

How can I get started with micro frontends using Hygraph?

To get started, follow the step-by-step guide in the blog, use tools like npx create-mf-app for scaffolding, and refer to Hygraph's developer resources for best practices and integration tips. (Source)

Where can I find working code examples for micro frontends?

Working code examples are available on GitHub at simple-micro-frontends and micro-frontends-demo. These repositories provide practical implementations referenced in the blog. (Source)

How do I manage dependencies between micro frontend apps?

Dependencies should be managed via API contracts and runtime integration, not at build time. This ensures that updates to one component do not require rebuilding other apps, maintaining true independence. (Source)

What are some advanced patterns for micro frontend state management?

Advanced patterns include using a dedicated app for shared state (e.g., favorites), leveraging observables, and synchronizing state across apps using libraries like Redux or Mobx. (Source)

How can I avoid dependency duplication in micro frontend architectures?

Careful design and management of shared libraries, as well as runtime integration, can help avoid dependency duplication. Teams should coordinate on shared dependencies and use module federation to load components dynamically. (Source)

What role does Hygraph play in supporting micro frontend architectures?

Hygraph provides a flexible, GraphQL-native CMS that can serve as a backend for micro frontend architectures, enabling content federation, integration with multiple data sources, and efficient content delivery. (Source)

How can I subscribe to updates and news about micro frontends and Hygraph?

You can sign up for the Hygraph newsletter to receive updates on releases, industry news, and insights related to micro frontends and content management. (Source)

Features & Capabilities

What are the key features of Hygraph?

Hygraph offers a GraphQL-native architecture, content federation, scalability, enterprise-grade security and compliance, user-friendly tools, Smart Edge Cache, localization, and asset management. These features enable businesses to deliver exceptional digital experiences efficiently. (Source)

Does Hygraph support integrations with other platforms?

Yes, Hygraph supports integrations with Digital Asset Management systems (Aprimo, AWS S3, Bynder, Cloudinary, Imgix, Mux, Scaleflex Filerobot), Adminix, Plasmic, and custom integrations via SDK or external APIs. Marketplace apps are also available for headless commerce and PIMs. (Source)

What APIs does Hygraph provide?

Hygraph provides multiple APIs: Content API (read/write), High Performance Content API (low latency, high throughput), MCP Server API (AI assistant integration), Asset Upload API, and Management API. (Source)

How does Hygraph ensure high performance?

Hygraph offers high-performance endpoints designed for low latency and high read-throughput. Performance is actively measured and optimized, with practical advice available in the GraphQL Report 2024. (Source)

What technical documentation is available for Hygraph?

Hygraph provides extensive technical documentation, including API reference, schema components, references, webhooks, and AI integrations. Resources are available at Hygraph Documentation.

Pricing & Plans

What pricing plans does Hygraph offer?

Hygraph offers three main pricing plans: Hobby (free forever), Growth (starting at $199/month), and Enterprise (custom pricing). Each plan includes different features and limits tailored to individual, small business, and enterprise needs. (Source)

What features are included in the Hobby plan?

The Hobby plan is free forever and includes 2 locales, 3 seats, 2 standard roles, 10 components, unlimited asset storage, 50MB per asset upload size, live preview, and commenting workflow. (Source)

What does the Growth plan cost and what does it include?

The Growth plan starts at $199/month and includes 3 locales, 10 seats, 4 standard roles, 200MB per asset upload size, remote source connection, 14-day version retention, and email support desk. (Source)

What is included in the Enterprise plan?

The Enterprise plan offers custom limits on users, roles, entries, locales, API calls, components, remote sources, version retention for a year, scheduled publishing, dedicated infrastructure, global CDN, security controls, SSO, multitenancy, backup recovery, custom workflows, and dedicated support. (Source)

Security & Compliance

What security and compliance certifications does Hygraph have?

Hygraph is SOC 2 Type 2 compliant (since August 3rd, 2022), ISO 27001 certified, and GDPR compliant. These certifications ensure high standards for data protection and information security. (Source)

How does Hygraph protect customer data?

Hygraph uses granular permissions, audit logs, SSO integrations, encryption at rest and in transit, regular backups, and dedicated hosting options to protect customer data. (Source)

Use Cases & Benefits

Who can benefit from using Hygraph?

Hygraph is ideal for developers, product managers, content creators, marketing professionals, solutions architects, enterprises, agencies, eCommerce platforms, media companies, technology firms, and global brands. (Source)

What industries are represented in Hygraph's case studies?

Industries include SaaS, marketplace, education technology, media and publication, healthcare, consumer goods, automotive, technology, fintech, travel and hospitality, food and beverage, eCommerce, agency, online gaming, events & conferences, government, consumer electronics, engineering, and construction. (Source)

What business impact can customers expect from using Hygraph?

Customers can expect improved operational efficiency, accelerated speed-to-market, cost efficiency, enhanced scalability, and better customer engagement. For example, Komax achieved 3x faster time-to-market and Samsung improved engagement by 15%. (Source)

Can you share specific case studies or success stories?

Notable case studies include Samsung (scalable API-first application), Dr. Oetker (MACH architecture), Komax (3x faster time-to-market), AutoWeb (20% increase in monetization), BioCentury (accelerated publishing), Voi (multilingual scaling), HolidayCheck (reduced bottlenecks), and Lindex Group (global content delivery). (Source)

Competition & Comparison

How does Hygraph compare to traditional CMS platforms?

Hygraph is the first GraphQL-native Headless CMS, offering simplified schema evolution, content federation, and seamless integration with modern tech stacks. It eliminates developer dependency and provides enterprise-grade features, setting it apart from traditional CMS platforms that rely on REST APIs. (Source)

Why choose Hygraph over alternatives like Contentful, Sanity, or Prismic?

Hygraph stands out with its GraphQL-native architecture, content federation, user-friendly tools, enterprise-grade security, and proven ROI. It ranked 2nd out of 102 Headless CMSs in the G2 Summer 2025 report and was voted the easiest to implement for the fourth time. (Source)

Pain Points & Solutions

What operational pain points does Hygraph solve?

Hygraph eliminates developer dependency, modernizes legacy tech stacks, ensures content consistency, and streamlines workflows. For example, HolidayCheck reduced bottlenecks and enabled marketers to update content independently. (Source)

How does Hygraph address financial challenges?

Hygraph reduces operational and maintenance costs, accelerates speed-to-market, and supports cost-effective scaling. Komax achieved faster launches and lower operational costs, while Samsung scaled globally with reduced maintenance overhead. (Source)

What technical pain points does Hygraph solve?

Hygraph simplifies schema evolution, integrates with third-party systems, optimizes performance, and enhances localization and asset management. Its GraphQL APIs and Smart Edge Cache address integration and performance bottlenecks. (Source)

Support & Implementation

How long does it take to implement Hygraph?

Implementation time varies by project complexity. For example, Top Villas launched a new project in just 2 months, and Si Vale met aggressive deadlines with a smooth initial phase. (Source)

How easy is it to get started with Hygraph?

Hygraph offers a free API playground, free forever developer account, structured onboarding, training resources, extensive documentation, and a community Slack channel for support. (Source)

What feedback have customers given about Hygraph's ease of use?

Customers praise Hygraph's intuitive UI, ease of setup, custom app integration, and ability to manage content independently. Anastasija S. highlighted instant front-end updates. Some users note complexity for less technical users. (Source)

Product Information

What is the primary purpose of Hygraph?

Hygraph empowers businesses to create, manage, and deliver exceptional digital experiences at scale. It simplifies workflows, enhances efficiency, and supports modern, flexible content management. (Source)

Who are some of Hygraph's customers?

Notable customers include Samsung, Dr. Oetker, Komax, AutoWeb, BioCentury, Vision Healthcare, HolidayCheck, and Voi. (Source)

Introducing Click to Edit

Micro Frontends - A Complete Guide

Micro Frontends is a concept of breaking huge frontend applications into smaller and manageable pieces.
Aagam Vadecha

Written by Aagam 

May 19, 2022
micro frontends

#What is it & Why Micro Frontends?

Micro Frontends is a concept of breaking huge frontend applications into smaller and manageable pieces that individual teams can build and maintain. If you understand microservices for the backend, it is similar, just applied to the frontend. Let’s go over the concept first.

To explain the frontend microservices, we first have to define the monolith. In a monolith system, everything resides in one repository and all the developers work on the same code base. For every single change, the entire app needs to be built, tested & shipped as a whole. In a lot of cases, this approach is fine, it works if you do it right and a lot of systems use it efficiently. However, as the software scales, there might be a need for a more efficient solution and a full rewrite might seem tempting.

In the early stages of building monoliths, it's likely for developers to unintentionally introduce high couplings where they otherwise wouldn’t exist, and when the project scales, the team size increases, many issues may arise. It becomes difficult to upgrade the dependencies due to a big codebase with huge impacts, a lot of time would be spent in coordination between developers, testing and deployments become slower, individual changes cannot be shipped, slowing down the pace of the team bringing value to the clients.

However, with microservices or micro frontends, codebase, teams, and responsibilities are split vertically in a way that the coupling between them is very low. Each team owns a smaller codebase, and can individually test, deploy and scale according to the needs. Now the teams only need to coordinate for the moving parts, which can be kept minimal with a good system design. The teams can easily manage their dependencies and even use a separate tech stack.

Let's back it up with a backend example so that everything fits right in!

Consider a very general backend monolith that contains all the core product APIs, all the code to generate pdfs, manage image resizing & uploads, sends notifications from a job queue, and a common database. These kinds of codebases cause the issues mentioned earlier.

Instead, if we break down all these services into different backend apps altogether, each deployed and maintained by individual teams, it's going to be much easier and faster to develop, maintain and ship even as the app scales. For example, for a team that works on and maintains the code to generate PDFs, the only thing the other teams need to know is the API contract. The core product might be written in Node, the PDF team can choose Python and a separate database even and it would be just fine. If with time, the demand for generating PDFs increases, we can scale only the PDF service horizontally instead of scaling the entire backend app in case of a monolith. Lastly, if you start looking properly you will definitely be able to form boundaries and split the core product APIs even into separate services and databases.

This concept of splitting up a monolith has already proven to be a great success in the backend and is picking up pace for frontend apps as well.

#Advantages Of Micro Frontends

Incremental upgrades

With a frontend monolith that’s armored with an outdated tech stack, developers are generally under the notion, If it works, don’t touch it. They need to make upgrades, but it’s a bit scary as the scope and impact are too wide. So either the upgrades happen with careful planning and a lot of work or they’re delayed till a point of absolute necessity. Micro frontends divide the scope of a single monolith, which in turn allows teams to easily make their upgrades as and when they see fit.

Simple, decoupled codebases

A monolith has a lot of code that keeps on increasing with time. On the contrary, the source code for micro frontends would be much smaller, which is a big relief. Additionally, devs would have less clutter on the screen every time they open up their project. Also, just like microservices, micro frontends would lead us to create proper boundaries between apps and in the process force us to avoid all couplings which might unintentionally exist in monoliths.

Independent deployment

Similar to incremental upgrades advantage, micro frontends also reduce the scope of deployments. All decoupled codebases should have their own CI/CD pipelines, the teams can individually decide if their app is ready to go in production and if it is, no issues from other apps would affect it. Also, with monoliths, for a small change or fix in some part of the app, you need to bundle all the code and ship it. Monoliths have long-running build & test phases in pipelines, but with a micro-frontend, you would simply have to ship just that app where the fix is needed.

Independent teams

Since we have decoupled codebases and independent deployments, the teams can own that app end-to-end. The teams can have full ownership of their deliverables. Just a side note, in many projects with monoliths, the frontend team tends to structure by a technical expertise filter.For instance, one team will handle all the layout & markup-related work, one will handle all the logic-related work, and one will do the CSS detailing & animations. This setting might not work, in micro frontends, each team needs to have all developers of Layout, Logic, CSS detailing capabilities.

#Disadvantages of Micro Frontends

In Software Engineering, tradeoffs are inevitable and everything has a price. You get the above benefits with micro frontends, but there are some drawbacks as well. You need a good architect to design a micro frontend architecture because design mistakes in early architecture can prove to be costly. With micro frontends, the operational cost and effort will increase, there will be more infrastructure requirements, more ci/cd pipelines, more domains, etc, compared to monoliths. Finally, there will be dependency duplication across different micro frontends. The user experience might suffer if the development team is not managing the dependencies wisely, as the end-user will have to download more data via network calls.

#Quick Recap

Monolith vs Micro FE

#How Do Micro Frontends Work?

There are many approaches that you might stumble across to implementing micro frontends, I’ll elaborate on the most common one that works and is used by many teams.

Wireframe image.jpg

Most frontends look something like this, wherein there is some common container with a header/footer/sidebar combination and changing content in between with layers of complexity. We can implement the container as one micro frontend app, and the rest of the content pages can be individual micro frontend apps in themselves.

Let’s look at the dependencies in package.json of the container app:

{
"name": "@portfolio/container",
"dependencies": {
"@portfolio/experience":"1.0.0",
"@portfolio/skills":"1.0.0",
"@portfolio/contact":"1.0.0",
...
}
}

Here we make a package out of each page, publish it, and then include it in the base app and use it. If the experience app needs to reuse some component of the skills page, then it can include skills in its package.json, the coupling can be managed via an API contract.

Well, this is a common misconception for many developers and is not the micro frontend approach. Let's say your skills app 1.0.0 is in use by the container and the experience app. It undergoes an upgrade and a 2.0.0 version is now published. However, you’ve built and deployed the experience app and the container app already with the skills 1.0.0 version. In order to use the 2.0.0 skills app, you’ll need to upgrade the skill package version in both experience and container apps, build and redeploy both apps. This defeats the purpose of micro frontends being individually deployable. We should not be integrating the pieces at build time but at run time.

#Implementing Micro Frontends & Best Practices

As mentioned earlier, the core technique to implement micro frontends is that we build & deploy everything separately and at run time we pull in the other components to use. At a very high level, it's like making a network call to get the component at the runtime via Javascript, and then using it. If we can pull in the actual skill component javascript itself from some server via a network call, it can give us the latest copy, unlike a package that has already been bundled. To implement this from scratch might seem a bit complicated, Module Federation simplifies building micro frontends. So let us get our hands dirty, build an example app and see a practical implementation of the concepts we talked about!

#Awesome Doctors!

If you stumble somewhere along the path, the final working code is here. We’ll make a small frontend app that shows a list of doctors and if you click on one of them it redirects you to a doctor’s profile. The aim here is to understand how micro frontends work in practice and form a decent base upon which you can build further.

Move to a fresh folder and let's call it the root folder. We have a nice utility to use module federation, so type npx create-mf-app The CLI will ask you a few questions regarding your framework choice and then set up a boilerplate, name this first app home. Open another terminal in the same root folder and create one more app with npx create-mf-app and name it doctorProfile. Start this app on a different port. I’ll be using React with Tailwind and running the apps on ports 4000, 4001 respectively. Go to both folders individually, install all packages and also install react-router-dom and then do a yarn start.

Note: It’s possible after the yarn install, the apps might give you an error regarding a memfs package, just install it as well.

StartApp1.jpg

StartApp2.jpg

So now we have two different apps, running on different ports. Let's move forward and do all the basic stuff in individual apps.

Home App

We will need some data to work with, for simplicity we’ll create a dummy file to act as our API src/service/doctorService.js

const doctorList = [{
id: 0,
name: "John Doe",
fees: "100$",
speciality: "Physician"
},
{
id: 1,
name: "Mary Jane",
fees: "150$",
speciality: "ENT, Dermatologist"
}, {
id: 2,
name: "Jane Doe",
fees: "200$",
speciality: "Pulmonologist"
}]
export const getDoctors = () => {
return doctorList
}

We’ll create some super simple components.

src/components/Header.jsx

import React from 'react'
import { Link } from 'react-router-dom';
function Header() {
return (
<div className="p-4 bg-gray-900 text-white flex justify-between items-center">
<Link to="/">
<span className="text-2xl font-bold" >
Awesome Doctors
</span>
</Link>
</div>
);
}
export default Header;

src/components/Footer.jsx

import React from 'react'
function Footer() {
return (
<div className="p-4 bg-gray-900 text-white text-sm">
All Rights Reserved.
</div>
);
}
export default Footer;

src/components/DoctorList.jsx

import React, { useState, useEffect } from 'react';
import { getDoctors } from '../service/doctorService';
const DoctorList = () => {
const [doctorList, setDoctorList] = useState([])
useEffect(() => {
setDoctorList(getDoctors())
}, []);
return (
<div className="flex flex-col flex-1 items-center justify-center">
{doctorList?.length > 0 ?
doctorList.map((doctor) => {
return (
<div className="w-2/5 flex flex-col mb-4" key={doctor.id}>
<div
className="bg-gray-800 rounded-lg p-5 mb-1 cursor-pointer
hover:shadow-lg transition-all"
>
<div className="uppercase text-base text-white"> {doctor.name} </div>
<div className="flex justify-between">
<div className="text-sm text-gray-400 "> {doctor.speciality} </div>
<div className="font-bold text-gray-200"> {doctor.fees} </div>
</div>
</div>
</div>
)
}) : <div className="text-white"> Loading... </div>
}
</div>
);
}
export default DoctorList;

src/App.jsx

import React from "react";
import ReactDOM from "react-dom";
import Header from './components/Header'
import Footer from './components/Footer'
import DoctorList from "./components/DoctorList";
import { BrowserRouter, Route, Routes } from 'react-router-dom';
import "./index.scss";
const App = () => (
<BrowserRouter>
<div className="h-screen flex flex-col bg-gray-50">
<Header />
<div className="my-8 flex-1 flex">
<Routes>
<Route path="/" exact element={<DoctorList />} />
</Routes>
</div>
<Footer />
</div>
</BrowserRouter>
);
ReactDOM.render(<App />, document.getElementById("app"));

Check the browser, you should see a nice doctorList page!

CompletedApp

Cool! Our first app is ready! Now let’s go ahead and set up our other app.

DoctorProfile App

Note: These service files are for simplicity and to reduce the scope of this example, In a real app the requests will be made to an API server which will get consistent data from DB.

src/service/doctorService.js Add the same array here we did in the Home app and replace the function with:

export const getDoctorById = (id) => {
return doctorList[id]
}

src/components/DoctorProfile.jsx

import React, { useState, useEffect } from 'react';
import { getDoctorById } from '../service/doctorService';
import { useParams } from 'react-router-dom';
const DoctorProfile = () => {
const [doctor, setDoctor] = useState(null)
const { id: doctorId } = useParams()
useEffect(() => {
setDoctor(getDoctorById(doctorId))
}, []);
return (
<div>
{
doctor ?
<div className="bg-gray-800 rounded-lg w-96 h-96 flex flex-col items-center justify-center">
<div className="uppercase text-xl text-white"> {doctor.name} </div>
<div className="text-sm text-gray-400 "> {doctor.speciality} </div>
<div className="font-bold text-gray-300"> {doctor.fees} </div>
</div>
: <div className="text-white"> Loading ... </div>
}
</div>
);
}
export default DoctorProfile;

src/App.jsx

import React from "react";
import ReactDOM from "react-dom";
import DoctorProfile from './components/DoctorProfile'
import { BrowserRouter, Routes, Route } from 'react-router-dom';
import "./index.scss";
const App = () => (
<BrowserRouter>
<Routes>
<Route path="/doctor/:id" element={<DoctorProfile />}>
</Route>
</Routes>
</BrowserRouter>
);
ReactDOM.render(<App />, document.getElementById("app"));

A quick check path /doctor/:id will give you DoctorProfileBase

#Micro Frontends In Action

Okay, so now we have two apps, running on different ports, one has our base with the doctorList and the other has doctorProfile. But we don’t want this, we want for the end-user to get a unified view of the system. We need to somehow bring the doctorProfile component in our base app, and to do that module federation will help us!

Inside the webpack.config.js we have the Module Federation plugin configuration, let’s use that. Go to the webpack.config.js of the DoctorProfile App Change the first four keys of the module federation plugin config to

{
name: "doctorProfileApp",
filename: "remoteEntry.js",
remotes: {},
exposes: {
"./src/components/DoctorProfile": "./src/components/DoctorProfile.jsx"
},
...
}

Go to the webpack.config.js of the Home App,

{
name: "homeApp",
filename: "remoteEntry.js",
remotes: {
doctorProfileApp: "doctorProfileApp@http://localhost:4001/remoteEntry.js",
},
exposes: {},
...
}

Okay, so what are we doing here? We exported the doctorProfile component from the DoctorProfileApp by adding an entry in the exposes setting, it will be exposed on the remoteEntry.js file on the DoctorProfile app server. After that, we added the same remoteEntry.js as a remote in the Home App’s webpack.config.js. Now restart both servers!

We can now use the DoctorProfile component in the Home App.

src/App.jsx

...
// Add this import
import DoctorProfile from "doctorProfileApp/src/components/DoctorProfile"
...
//Add this route
<Route path="/doctor/:id" element={
<div className="flex flex-1 items-center justify-center">
<DoctorProfile />
</div>
}/>
...

src/components/DoctorList.jsx

...
//Add this import
import { useNavigate } from 'react-router-dom';
//Add this function
const navigate = useNavigate();
const navigateToDoctorProfile = (id) => {
navigate(`/doctor/${id}`)
}
...
// Attach a click event with the a <div> tag to navigate to DoctorProfile page.
onClick={() => navigateToDoctorProfile(doctor.id)}
...

That’s it, Check the browser!

CompletedApp

CompletedApp2

We are now getting the doctorProfile components on the http://localhost:*4000*/doctor/2 path.

Also, to confirm the network call happening at runtime to fetch the remote component, open the Network tab in the Home App & reload the page. You can see network calls for getting the doctorProfile component happening on the fly. Try to make a change, for instance, the background color in the doctorProfile component in the doctorProfile App and then simply reload the home app, it will be reflected there as well (On Run Time, we won’t need to rebuild any apps).

NetworkEvidence

RunTimeEvidence

We have successfully implemented a small example of Micro Frontends!

If you want to go on to explore micro frontend patterns more, you can try going a step further. At times, it's not possible to avoid a shared state between micro frontends and you might need to manage it. And, the next step would be to build an app to manage some shared state.

For instance, you can develop this existing setup further to build a favorites app. that will manage favorite doctors. Place Add, Remove buttons in the doctorList but manage the state (i.e the list of favorite doctors) in the new favorites app and also keep that state in sync with the Home app so that you can make a decision whether to show the Add or the Remove button.

Something along these lines:

ExploreFurther1

ExploreFurther2

I’d recommend you to try on your own, you’ll need a library to manage observables something like Redux / Mobx / rxjs, and the learnings from this article, If you struggle you can always take a sneak peek here.

Blog Author

Aagam Vadecha

Aagam Vadecha

As a Software Engineer, my daily routine revolves around writing scalable applications with clean code & maintaining them. In my spare time, I love to explore software architecture patterns, write tech articles & watch thrillers!

Share with others

Sign up for our newsletter!

Be the first to know about releases and industry news and insights.