Recoil is an open-source state management library. It provides an easy way to share the state between all components of a react application. It is very easy to set up, unlike redux which does not need boilerplate code to set up. It provides a data-graph flow that flows from atoms i.e. our shared states to selectors i.e a pure function and then into the react component.
Just like redux, Recoil provides a global state, called Atoms. Atoms are a single source of truth that contains all states of an application. All components of our react application can access them and can subscribe to changes made on them.
Selectors are pure functions that take atoms or other selectors as input and return output based on the changes in input.
npx create-react-app my-app
As Recoil is a state management library for React, First we need to create a react app.
Recoil is very easy to set up. Following are the steps to get started with recoil setup in your react application:
Run the following command to install the latest stable version of Recoil if you are using npm.
Or if you are using yarn then
Or if you are using bower then
Now wrap your root component in RecoilRoot just like below
import React from "react";
import { RecoilRoot } from "recoil";
import Counter from "./counter";
function App() {
return (
<RecoilRoot>
<Counter />
</RecoilRoot>
);
}
export default App;
Now, In your counter component we will write the logic for counter application using Recoil.
First we will create an atom in our counter component that will contain the counter state.
const counterState = atom({
key: "counterState",
default: 0,
});
We have given the name counterState to our atom. A unique key counterState given to it and set the default value to 0.
useRecoilState hook is used to write and read the atom. useSetRecoilState hook is used to write to the atom while useRecoilValue hook is used to read it.
const Counter = () => {
const [counter, setCounter] = useRecoilState(counterState);
const count = useRecoilValue(countIncrementState);
const onIncrementClick = () => {
setCounter(counter + 1);
};
return (
<div className="App">
<h3>Recoil Demo</h3>
<button onClick={() => onIncrementClick()}>Increment</button>
<p>{`Current Counter State is: ${counter}`}</p>
<p>{`Next Counter State is: ${count}`}</p>
</div>
);
};
Now we have created a selector to transform the value of a state.
const countIncrementState = selector({
key: "counterIncState",
get: ({ get }) => {
return get(counterState) + 1;
},
});
After wrapping up the entire code in a file the final code will look like this
import React from "react";
import { atom, selector, useRecoilState, useRecoilValue } from "recoil";
const counterState = atom({
key: "counterState",
default: 0,
});
const countIncrementState = selector({
key: "counterIncState",
get: ({ get }) => {
return get(counterState) + 1;
},
});
const Counter = () => {
const [counter, setCounter] = useRecoilState(counterState);
const count = useRecoilValue(countIncrementState);
const onIncrementClick = () => {
setCounter(counter + 1);
};
return (
<div className="App">
<h3>Recoil Demo</h3>
<button onClick={() => onIncrementClick()}>Increment</button>
<p>{`Current Counter State is: ${counter}`}</p>
<p>{`Next Counter State is: ${count}`}</p>
</div>
);
};
export default Counter;
Below is the output for the above code.
Recoil is a competent state management library. In the future, Recoil has tremendous promising potential, so if you want to use it in your large applications for state management, you won’t be disappointed. It has its own unique benefits over other state management libraries or tools. Even though Recoil is still in its early age and might take a while to establish itself, we can certainly foresee an encouraging future thanks to its easy learning curve, less boilerplate code, and elementary data flow.
Using dynamic packaging technology, one can encapsulate flights, accommodation, cars,…
In today’s contemporary era of accelerated digital evolution, the importance…
The fact is that in today’s internet environment the only…
This website uses cookies.