In this post, we will talk about state management in the context of React and Redux. I’ll show you a problem I was trying to solve and a proposed solution I made for QuintoAndar.The problem
First thing first: the problem! This part is really important. I was trying to solve a problem, not adding shiny technologies to QuintoAndar’s tech stack.
While developing the new Originals listing, we fetched data from an API to render the page. An important part of this data was an attribute called
specialConditions. It is a list of real estate conditions.
A list. Yes, we expected it to be always a list, but somewhere in the codebase, we dispatched an action to mutate this value to an
undefined causing a bug and need for a bug fix.
Since that day, I was searching for a solution to make the system more consistent. If it is a list, it will always be a list. No matter how creative we are as developers.
This problem can be really common as the codebase grows. Because it is easy to have hidden effects that you are not aware of. It scales badly.
So typing the whole redux lifecycle came to mind. If we type the state and each Redux “lifecycle agent”, we can make it resilient and consistent.
The idea was to make the PWA architecture explicit, resilient, and consistent across the Redux lifecycle by typing the state, actions, reducers, handlers, and selectors.
Handling frontend state management is complex. As we use Redux as the main state management architecture for - almost - all PWAs at QuintoAndar, building a framework to apply typings to Redux is a good way to make a guideline with best practices and conventions to scale across QuintoAndar PWAs.
Constraints are a really important concept to keep us away from making simple mistakes. By typing our redux lifecycle, we can protect, at least in compile-time, our main data handler from these kinds of mistakes.
By typing our initial states, reducers, and handlers we gain for free good documentation about the Redux lifecycle, making it easier to reason the details about what is expected in each step.
An important note in this proposal is that we created it thinking about the problem and the QuintoAndar’s context (current tech stack and tooling, developers acceptance, what could scale across our PWAs). We will talk about these topics:
We came across some questions to choose a tool:
Some tools that can solve the problem: Flow, ReasonML, Elm, ClojureScript, and Typescript. (disclaimer: ClojureScript is from the LISP family. It doesn’t have a static type system. But it has some cool features like immutable data structures)
Typescript is used in some PWAs. Some use to type the API and app data contract with Typescript models (classes, interfaces, types). Others use the data fetcher for houses, search, and neighborhood. Flow, instead, is not used in our PWAs.
So we started with Typescript to do a proof of concept and see how it goes.
The idea behind the proposal is to type Redux agents. For - almost - all QuintoAndar’s PWAs, we have actions, reducers, handlers, and selectors to type.
We can organize these agents inside the container component folder:
__ containers |__ MyComponent |__ actions.ts |__ handlers.ts |__ reducer.ts |__ selectors.ts |__ types.ts
#react #redux #developer
If you are undertaking a mobile app development for your start-up or enterprise, you are likely wondering whether to use React Native. As a popular development framework, React Native helps you to develop near-native mobile apps. However, you are probably also wondering how close you can get to a native app by using React Native. How native is React Native?
In the article, we discuss the similarities between native mobile development and development using React Native. We also touch upon where they differ and how to bridge the gaps. Read on.
Let’s briefly set the context first. We will briefly touch upon what React Native is and how it differs from earlier hybrid frameworks.
Although relatively new, React Native has acquired a high degree of popularity. The “Stack Overflow Developer Survey 2019” report identifies it as the 8th most loved framework. Facebook, Walmart, and Bloomberg are some of the top companies that use React Native.
The popularity of React Native comes from its advantages. Some of its advantages are as follows:
Are you wondering whether React Native is just another of those hybrid frameworks like Ionic or Cordova? It’s not! React Native is fundamentally different from these earlier hybrid frameworks.
React Native is very close to native. Consider the following aspects as described on the React Native website:
Due to these factors, React Native offers many more advantages compared to those earlier hybrid frameworks. We now review them.
#android app #frontend #ios app #mobile app development #benefits of react native #is react native good for mobile app development #native vs #pros and cons of react native #react mobile development #react native development #react native experience #react native framework #react native ios vs android #react native pros and cons #react native vs android #react native vs native #react native vs native performance #react vs native #why react native #why use react native
Redux has become one of the most popular libraries in front-end development since it was introduced by Dan Abramov and Andrew Clark in 2015. They designed it as the successor for Flux, with the support of some developer tools and a few more concepts embedded in it.
Flux vs Redux comparison source: enappd.com
Despite its advantages, some developers have found it rather challenging to deal with Redux due to the amount of boilerplate code introduced with it. And the complexity of the code seems to be another reason for the difficulty.
In this article, we will look at how to reduce the boilerplate code brought about by Actions and Reducers using Redux-Actions
#react-redux-boilerplate #react-redux #react #react-actions #redux
In the world of React, efficient State Management is one of the most important things a developer has to perform in order to produce a solid website and Redux is one of the best ways of achieving this.
In this article we are going to see how you could get started with Redux and use it to easily manage state in your React apps.
Redux is used for managing and updating state in an immutable way.
This means that when changes are done to the state, the existing state isn’t updated to a new value, instead a new reference of the existing data is created, changes are made and the old state is replaced with this.
Redux helps to create a single source of truth. Redux allows you to maintain all your data in one place, making life easier. All your data storage and manipulation happens in one place.So enough of introductions… Its time to get our hands dirty.
We are going to build a simple app where we can manage two entities, Posts and Todos. You can take a look at the finished website here. We will be
Loading Posts and Todos from the JSON PlaceHolder API
Adding a Post or Todo
Deleting a Post or Todo
#react #react-redux #redux
I’ll like to talk about how to understand state in a way that helps you make more informed decisions about managing it.
State in reactive programming is data that dictacts the configuration of the application in any moment in time.
In simpler words, any part of the application that is subject to change has some associated data that changes it; that data is called a state. Now, this is where people stop, learn about state, and then after learning redux put everything inside redux global state. In order to understand how to better manage state, we need to know how many types of state there can be. I like to classify state in two ways and then choose the technologies that are best suited for managing those kinds of state.
Wherefrom the state originates is an important thing to consider and can be classified into:
**Client-side state: **Any data that is generated and consumed on the client-side like UI state can be put into this category. The general rule of thumb while managing this sort of state is to see how far the components consuming it are in the component tree. We will talk about this sort of classification a bit later.
A good practice to follow if you are unsure of managing this is start with local state and you if other components need it too, you can start lifting the state up the tree. Note: Never put UI state in the cache.
Redux is a powerful state management tool that can be very useful as your React or React Native application grows and requires you to keep track of more state. How you want to set up Redux is up to you, but if you’re a beginner, it may be easiest to learn the flow of Redux with a step-by-step walkthrough. Here I’ve outlined a basic way to set up Redux to go along with this post and it will be the same for React and React Native.
#react #react-native #redux #react-redux