Lorem ipsum dolor sit amet, consectetur adipiscing elit lobortis arcu enim urna adipiscing praesent velit viverra sit semper lorem eu cursus vel hendrerit elementum morbi curabitur etiam nibh justo, lorem aliquet donec sed sit mi at ante massa mattis.
Lorem ipsum dolor sit amet, consectetur adipiscing elit ut aliquam, purus sit amet luctus venenatis, lectus magna fringilla urna, porttitor rhoncus dolor purus non enim praesent elementum facilisis leo, vel fringilla est ullamcorper eget nulla facilisi etiam dignissim diam quis enim lobortis scelerisque fermentum dui faucibus in ornare quam viverra orci sagittis eu volutpat odio facilisis mauris sit amet massa vitae tortor condimentum lacinia quis vel eros donec ac odio tempor orci dapibus ultrices in iaculis nunc sed augue lacus
At risus viverra adipiscing at in tellus integer feugiat nisl pretium fusce id velit ut tortor sagittis orci a scelerisque purus semper eget at lectus urna duis convallis. porta nibh venenatis cras sed felis eget neque laoreet libero id faucibus nisl donec pretium vulputate sapien nec sagittis aliquam nunc lobortis mattis aliquam faucibus purus in.
Nisi quis eleifend quam adipiscing vitae aliquet bibendum enim facilisis gravida neque. Velit euismod in pellentesque massa placerat volutpat lacus laoreet non curabitur gravida odio aenean sed adipiscing diam donec adipiscing tristique risus. amet est placerat in egestas erat imperdiet sed euismod nisi.
“Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum”
Eget lorem dolor sed viverra ipsum nunc aliquet bibendum felis donec et odio pellentesque diam volutpat commodo sed egestas aliquam sem fringilla ut morbi tincidunt augue interdum velit euismod eu tincidunt tortor aliquam nulla facilisi aenean sed adipiscing diam donec adipiscing ut lectus arcu bibendum at varius vel pharetra nibh venenatis cras sed felis eget dolor cosnectur drolo.
Photo by Tatiana Rodriguez on Unsplash
Time has passed quickly since the announcement of React Hooks at React Conf in 2018. It’s been 18 months for us working with React Hooks in production, and we have perceived a massive shift in the architectural front-end approach.
React is one of the leading front-end frameworks and is well-known for its reusable UI components. The class components and UI (“dumb”) components are the building blocks of React. Class components manage their own state and life cycle. Handling and maintaining React components in large projects is challenging.
React Hooks have solved seemingly discrete problems. Hooks have touched different dimensions in our projects. It makes our code clean and better. We’ll see how implementing React Hooks creates a difference in our projects.
React Hooks is designed to solve these problems. With Hooks, you can:
Initially, Hooks integration started as additions to existing functional components, but they are now gradually becoming a centric part of your project.
By implementing Hooks, you can access the class component features like state, context, effects in a stateless functional component. Different React Hooks are serving various purposes, replacing your Class-style component lifecycle logic and even providing advanced state management in the component level.
We’ll now take a look at some commonly used Hooks.
A basic most-used Hook. It eliminates the difference between the functional components and stateless components. The Hook “useState()” alone changes the way functional components work. In a class component, a state is defined in the constructor and accessed using “this.state” while updating or setting the state. Hooks state to a functional component.
1import React, { useState } from "react";
2
3export default function Button() {
4 const [initialText, setText] = useState(
5 "Click to change the text"
6 );
7
8 function btnClick() {
9 return setText("Text changed via Hook useState");
10 }
11
12 return <button onClick={btnClick}>{initialText}</button>;
13}
useReducer()
This saves the state and is used as an alternative for “useState()” in complex scenarios. A pure function reducer and the initial state is the input of the “useReducer()”. The function takes the current state and action, and it returns a state. As the next state depends upon the previous state, it is used in complex and nested objects.
1import React, { useReducer } from "react";
2
3function reducer(state, action) {
4 switch (action.type) {
5 case "Say Hello":
6 return (state = "Hello");
7 case "Say Bye":
8 return (state = "Bye");
9 default:
10 return state;
11 }
12}
13
14export default function Button() {
15 const [text, dispatch] = useReducer(
16 reducer,
17 "Say Something"
18 );
19
20 return (
21 <div>
22 <div> {text} </div>
23 <button onClick={() => dispatch({ type: "Say Hello" })}>
24 Click to say Hello
25 </button>
26 <button onClick={() => dispatch({ type: "Say Bye" })}>
27 {" "}
28 Click to say Bye{" "}
29 </button>
30 </div>
31 );
32}
The components in React are inter-related and are affected by data fetching, subscription or change of DOM elements. These effect on the components are referenced as “side effect”.
Before Hooks, lifecycle methods such as componentDidMount, componentDidUpdate, and componentWillUnmount were used to update the DOM elements. With useEffect Hook, you can run the “effect” function after the changes in DOM. Using useEffect() Hook you improve performance, readability and eliminate repetition of code with less boilerplate.
Below is a concise example. For more info & examples about useEffect, check out our recent post regarding useEffect and its various pitfalls.
useEffect(() => {
prepareBehaviourOne(props.Invite.id, handleStatusChange);
return () => {
releaseBehaviourOne(props.Invite.id, handleStatusChange);
};
});
useEffect(() => {
prepareBehaviourTwo(props.highlightText.chat.id, handleStatusChange);
return () => {
releaseBehaviourTwo(props.highlightText.id, handleStatusChange);
That’s it for this time, more hooks and conclusions in our next post – stay tuned!