I’m a pretty new one in the developing the frontend app in the web. Making a user interface in the web with HTML, CSS, and JS was a very tedious work and its code writing was so much ugly because of my short knowledge. If I had tried to learn the core nature of JS in the early days, it could be one of my best languages in the development. Unfortunately, there was no such poor language than JS when I saw its beginning and its characteristics as a programming language. It has become the dominant programming language in the development world.
In recent days, I’ve fallen in love with the ReactJS app in the web. I’d hated the UI programming with any sorts of language, from VC++ to WEB(Mostly with HTML). But the ReactJS helps me to build a humble web app with full functionalities we need. Its code looks very good by adopting the functional and asynchronous style. Its functional coding style helps the asynchronous event handling in a straightforward way.
Redux and the management of the state
But one of the headaches we should care is the separation of the logic from the UI. The frontend and backend system development approach has helped us define a clear role and responsibility and most of the critical business logic is on the backend side. However, some fraction of codes is related with the none UIs, just like the interactions with the backend. The values returned by the backend defines what actions or interaction should happen between the frontend app and a user. We call the set of values who controls the interaction as “states“. According to the characteristics of the data, some states are meaningful only a specific page. On the other hand, some states are valuable in the overall app and need to be shared by all pages or workflows in the app. In ReactJS, we call it the first as the “local states“, the other as the “global states“.
As far as I know, one of the many reasons why the redux feature has been introduced is to cover the management of the global states. The global states are very important resources and it should be managed in a controlled way. It means we should not make it be modified by anyone because it can do. To achieve this goal, it has adopted the value modification with the state machine along with the asynchronously executing observers. Anyone can reference values of the global states via the component’s properties, which are read-only and you cannot modify it directly.
You can see the technical details in the following resources.
- https://redux-observable.js.org/
- https://redux-observable.js.org/docs/basics/Epics.html
- https://redux.js.org/basics/reducers
- Simple online code writing and running tool: http://jsbin.com/jexomi/edit?js,output
- https://redux-observable.js.org/docs/Troubleshooting.html#rxjs-operators-are-missing-eg-typeerror-actionoftypeswitchmap-is-not-a-function
It is a pretty awesome framework for many reasons.
- It allows you to manage the global values in the structured and controlled way via the state transitions.
- Its architectural guide enforces the separation of the logical data manipulation from the UIs who trigger the action by a user.
- It provides the simple global value reference via ReactJS component’s properties in a safe way.
But how about the local states?
Separation of concerns between UI and the logic vs Aggregating common concerns
Persistence
Well, the redux-observable is a good solution to handle the global state management but it doesn’t keep the last global state in the browser. If you hit the current URL in the browser’s address bar, booms!! All the states kept in your web app are reset by the default values. To keep it, we should make one of the utilities such as the local storage, cookies, and sessions. The redux-persist supports the feature, not hurting the existing code. It requires a minimal routing change and offers a way to share the information among separate pages.
- https://www.npmjs.com/package/redux-persist#nested-persists
The “Transform” should be your consideration to keep the local data safe. The data deletion is the simplest way to achieve this goal and the following guides can offer the way.
- https://github.com/gabceb/redux-persist-transform-expire
- https://github.com/maxdeviant/redux-persist-transform-encrypt
It is the first summary of my javascript/react programming and I will try to keep posting articles related to it sooner or later.