Jacob Banks

Jacob Banks

1595390682

Consistent State Management in React and Redux

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 solution

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.

The proposal

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:

  • Choosing the tool
  • Redux Lifecycle Agents
  • Immutable data
  • Proof of Concept with one of our PWAs
  • Pros and Cons

Choosing the tool

We came across some questions to choose a tool:

  • Does it really solve the problem?
  • Acceptance at QuintoAndar.
  • The tool in the tech community.

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)

Thinking about the QuintoAndar’s codebase, it’s all JavaScript. Choosing a different language like ReasonML, Elm or ClojureScript would be a drawback in terms of learning a new language and have a guideline with best practices and conventions. Flow and Typescript, instead, are wrappers - or a superset - to JavaScript. It’s easier to learn new APIs in comparison to a totally new language. Even though we like learning and trying new things, I thought that we should have a gentle learning curve and still solve the main problem.

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.

TypeScript is one of the fastest-growing languages and is currently the leading compile-to-JavaScript language. Some big companies - like Airbnb - are also adopting this tool at scale.

So we started with Typescript to do a proof of concept and see how it goes.

Redux Lifecycle Agents

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.

  • Actions: Using types to type the actions contract - type, promise, meta, extraProperties, properties, etc.
  • Store state: Contract for initialState and make it consistent across the Redux lifecycle.
  • Reducers: Take care of the state contract, returning only the correct type contract - changing only the data, not the types - by using handlers.
  • Handlers: Take care of the external interaction lifecycle and state mapping. Enforce that the final state will have the same contract as expected - the store state contract. Handlers are a common pattern when using redux-pack.
  • From External Interaction Data: A contract for data from API or Firestore or any other external interaction.
  • To Store State: Use the store state contract - basically, the reducer initial state contract.
  • Selectors: Get the store state and map to component state - props - with mapStateToProps.
  • Types: a repository of types for all the agents.

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

What is GEEK

Buddha Community

Consistent State Management in React and Redux
Autumn  Blick

Autumn Blick

1598839687

How native is React Native? | React Native vs Native App Development

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.

A brief introduction to React Native

Let’s briefly set the context first. We will briefly touch upon what React Native is and how it differs from earlier hybrid frameworks.

React Native is a popular JavaScript framework that Facebook has created. You can use this open-source framework to code natively rendering Android and iOS mobile apps. You can use it to develop web apps too.

Facebook has developed React Native based on React, its JavaScript library. The first release of React Native came in March 2015. At the time of writing this article, the latest stable release of React Native is 0.62.0, and it was released in March 2020.

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:

  • Performance: It delivers optimal performance.
  • Cross-platform development: You can develop both Android and iOS apps with it. The reuse of code expedites development and reduces costs.
  • UI design: React Native enables you to design simple and responsive UI for your mobile app.
  • 3rd party plugins: This framework supports 3rd party plugins.
  • Developer community: A vibrant community of developers support React Native.

Why React Native is fundamentally different from earlier hybrid frameworks

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:

  • Access to many native platforms features: The primitives of React Native render to native platform UI. This means that your React Native app will use many native platform APIs as native apps would do.
  • Near-native user experience: React Native provides several native components, and these are platform agnostic.
  • The ease of accessing native APIs: React Native uses a declarative UI paradigm. This enables React Native to interact easily with native platform APIs since React Native wraps existing native code.

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

Reduce Redux Boilerplate Code with Redux-Actions

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 is a fancy name for observer pattern further modified to support React. Both Flux and Redux consist of similar concepts like Store, Actions (events in the application). In other words, Flux is a simple JavaScript object but with some middleware like redux-thunk. It can be a function or a promise for Redux. However, Redux is a single source of truth with concepts like immutability, which improve performance. It is one of the main reasons for Redux to dominate in State Management.

Image for post

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

Caleb  Towne

Caleb Towne

1614224231

React Redux Deep Dive: State Management in React with Redux

Introduction

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.

What is Redux?

Redux is a predictable state container for JavaScript 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.

Why Redux?

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.

What are we going to build?

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

The Boring React State Management Guide

What is State?

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.

Classification based on origin

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.

#react #javascript #typescript #state-management #redux #context-api #react-hook #tutorial

Karine  Crooks

Karine Crooks

1589960215

A Basic Redux Setup in React/React Native

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