Efficient State Management With Hookstate
From Author:
If you’ve worked with the React useState hook before, you might have wondered why global state management can’t be just as easy. Why do we still need so much boilerplate to manage state with the Context API? What if we don’t want to be constrained opinionated tools like Redux Toolkit or forced to use actions and reducers in our React applications? This is where Hookstate comes in. Hookstate is not just another state management solution. Apart from being feature-rich, fast, and flexible, the library takes the idea of simplifying state management in React apps to a whole new level. In this talk, I’ll introduce Hookstate as a simple and efficient state management solution for React applications.
This talk has been presented at React Advanced 2021, check out the latest edition of this React Conference.
FAQ
HookState is a state management solution for React applications. It is known for its flexibility and simplicity, making it an appealing choice for managing state in React apps.
HookState simplifies React state management by allowing developers to manage global states easily using methods like 'createState' from HookState/core, and 'tasks.push' to add new tasks, avoiding the complexity of traditional methods like reducers, actions, and spread operators.
The main benefits of using HookState include its simplicity, flexibility, and the ease of integrating it into existing React applications. It reduces the complexity typically associated with other state management tools like Redux or the React Context API.
Yes, HookState can manage both local and global state in React applications. It uses 'createState' for global states and 'useState' hook for local states, providing a unified approach to handling state across components.
You can install HookState by using npm or yarn package managers. The commands are 'npm install @hookstate/core' or 'yarn add @hookstate/core' for the core functionalities.
Yes, HookState includes extensions like '@hookstate/persistence' which help in persisting state in the browser's local storage, ensuring that state can be maintained even after the browser window is closed.
Tasks in HookState are managed through the global state object, and can be updated using methods such as 'tasks.merge' for adding new tasks and 'tasks.set' for updating existing ones. Tasks are accessed and manipulated directly from the store, simplifying the state management process.
In HookState, tasks can be removed by setting the task's value to 'none' using the 'set' method. This approach is used to mark a task as deleted in the state management system.
Video Transcription
1. Introduction to Hook State
Hey, everyone. My name is Ebenezer Dawn, advocate at JetBrains for Webster MITE. I want to talk about efficient state management with hook state. Hook state is a state management solution for React. It's flexible and takes simplicity to a whole new level. I will use this application to demo hook states. We have two components for this application, one for not completed tasks and another for completed tasks. They share the same state using hook state for state management. Managing global state with hook state is easy compared to other tools like Redux or react context API.
Hey, everyone. Good morning, good afternoon, or good evening. My name is Ebenezer Dawn, advocate at JetBrains for Webster MITE. And I want to talk about efficient state management with hook state.
Okay, what's hook state? Well, it's understandable if you've not heard about hook state before. Hook state is not that old in the game. It's a state management solution for React. And one thing I really like about it, apart from hook state being flexible and it takes simplicity to a whole new level.
So I want to use this application to demo hook states. I know, I know that to do operate is the only way I could show you create read update and delete the simplest way rather than I can show you that with a state management tool like hook state for example. So right in auto job we can complete task that's updating the task. We can also delete that we can add new tasks. So do stuff. And I've decided to use two different components for this application. We have the to dew components which represents the not complete that task, that's one component, we have another component for the completed task. And these two components share the same state, raising hook state for state management.
Now, if we go back to ID right now, I'm in a starter code base, which means I'm not using hook state yet. This we have a starter js file, and then we have tasks inside of it. What if global state management was this easy? What if this is all we needed to do to manage global state, we just have a variable and its name tasks, or whatever state we want. And we export it, then we go back to different components. And all we got to do is import it and use it. Same thing with the not completed component. This is not a fixed state, this is just using JavaScript variables to export and import. You've probably used Redux before, or react context API, or RxJS and all the rest. The state management, it works, it's really efficient, state management with these tools. But it's complex. It's really complex. And I want it to be this easy. I wanted that if I want to add a new task, I have just one method like we have on line 10, like tasks.push. And then I have my new task, instead of using extra slices, reducers, actions and all the rest or the Spread Operator having a previous state and then the next state and all that.
2. Using HookState for Global State Management
Can I just do tasks.push and I have my new task. This is why I love HookState. Now let me go back to the main branch where I have the implementation for HookState. This is an application built with HookState. And right in the store.js file, this is how we're using HookState to create a global state. We have store and that's equal to the create state method from add HookState slash core. So you want to install hookstate, that's npm install slash core, or yarn add HookState slash core. And why we have slash core right now is because HookState remember I said is very extensible.
Can I just do tasks.push and I have my new task. This is why I love HookState. Now let me go back to the main branch where I have that should be this, where I have the implementation for HookState. This is an application built with HookState. And right in the store.js file, this is how we're using HookState to create a global state.
We have store and that's equal to the create state method from add HookState slash core. So you want to install hookstate, that's npm install slash core, or yarn add HookState slash core. And why we have slash core right now is because HookState remember I said is very extensible. So we also have hookstate slash persistence, which helps us to persist states in the local stories of browser's local storage. How cool is that? But what we need right now is HookState slash core. And the create state method from HookState slash core. This is all we got to do to create a global state. And we have tasks right inside of the object for create state methods. So why I use an object is because I'm actually want to add other things to let's say this is a global store.
And I want to add other things like something else. And this is my new state right now, this is my new state I can, whatever, whatever methods, HookState makes available to store, which is which contains all the other states is also made available to tasks and to something else. So if we come over to the Apple GS file, we were adding a new task and online 12. It's that simple. So I didn't you guys we have task dot merge and a new task. That's all right now on line seven, we are using the use states hook from HookState to get the value of tax. So we want to use tax from a global store, we have const and then we're destructuring directly we can decide to say this is constate is equal to use stage and then destroy importing from dot slash store and then we decide to do store dot tasks. Yeah, but what we decided to do is destructured a really and then right here we have taxed and we can use that.
Now in HookState to get the value of a state, we need the get method. So right here we have input value that gets and that gets the value of this local state and creates an online eight, we can create global states, we can create local state and greater the state for the input value. And I just do that directly with the use states hook. I don't need the create state for this one. I wanted to be a global state. I use the Create states method. I use the use date hook and then have my local state and input value that gets gets the value of my local state. And you can see right here on line 27, where I'm setting the value of input value to be whatever I use that type inside of the input field.
Comments