Recently React introduced some new cool fetures, one of interesting and much awaited feature is New Context API. New context API introduced with version 16.3. Context API’s are very useful in state management without props drilling. Let’s deep dive into the same.
In many cases, in our application we need to pass the state of componenet to two-three level deep. so we passed props down to the levels and levels of the component tree when not all of those components necessarily need those props. Suppose component hierarchy is complex then state management would be overhead for developers.
For state management theres are couple of libraries available like Redux (most used and trending). But React introduced the Context API to solve the problem of props drilling and made developers work of state management simple.
As React suggests “If you only want to avoid passing some props through many levels. Context is designed to share data that can be considered “global” for a tree of React components, such as the current authenticated user, theme, or preferred language.”
So now if you want to use context in your application, first create context object.
import { createContext } from 'react';
const {Provider, Consumer } = React.createContext();
Then create a wrapper component that will return Provider component and also add as children all the components from which you want to access the context.
class ProviderComponent extends Component { state = { title : “Vishal”, }
render() { return ( <Provider value={this.state}> <Website /> </Provider> ) }}
Our Website component look like
const Website = () => ( <div> <Header /> <Footer /> </div>)
Now if we want to access the title from provider component to the Header componet, we can simply consume state of provider component using context without prop drilling.
const Header = () => ( <div> <Consumer> {(context) => context.title} </Consumer> </div>)
This new cool feature of ReactJS helps developers to make their work simple and easy. For a simple prop drilling solution, context works perfectly but for larger apps that have complex states and reducers, Redux may be a the better solution.
Thanks for reading. I hope you enjoyed this article 🙏