Are middleware and enhancers necessary in redux necessary? - reactjs

I am trying to teach myself redux, I spent a bunch of time learning the outdated documentation. RIP. So now I am learning from https://react-redux.js.org/introduction/quick-start .
When configuring my store to start the tutorial, I came across middleware and enhancers. Can someone explain to me exactly what these do in simple terms and if/when they are necessary!
I appreciate any insight more than you guys know! Thankyou. Also, if you have a good tutorial to follow that would be appreciated as well! Short term I am trying to take a user input and send it for display on a separate page.

Those docs are for the React-Redux library, specifically, which is the UI bindings layer to let React components talk to the Redux store. "Middleware" and "enhancers" are a Redux core specific concept, so you won't find any info there.
To actually learn Redux, please read through the newly rewritten official tutorials in the Redux docs, which have been specifically designed to teach you how Redux works and show our recommended practices:
"Redux Essentials" tutorial: teaches "how to use Redux, the right way", by building a real-world app using Redux Toolkit
"Redux Fundamentals" tutorial: teaches "how Redux works, from the bottom up", by showing how to write Redux code by hand and why standard usage patterns exist, and how Redux Toolkit simplifies those patterns
For this question specifically, the "Store" page in the "Fundamentals" tutorial covers what "enhancers" and "middleware" are:
A store enhancer is like a special version of createStore that adds another layer wrapping around the original Redux store. An enhanced store can then change how the store behaves, by supplying its own versions of the store's dispatch, getState, and subscribe functions instead of the originals.
and:
Enhancers are powerful because they can override or replace any of the store's methods: dispatch, getState, and subscribe.
But, much of the time, we only need to customize how dispatch behaves. It would be nice if there was a way to add some customized behavior when dispatch runs.
Redux uses a special kind of addon called middleware to let us customize the dispatch function.

Related

React/Redux Receive data from JSON and display/edit them

I am trying to help a friend build a React/Redux app where it will get some data from a JSON file and diplay them and be able to edit them.
As we are both new to this and the deadline is pretty close I was wondering if there is anyone who can enlight us on how to do it.
I tried a couple of tutorials like these
Tutorial 1
Tutorial 2
but they weren't too much help as they are either outdated or not what we are looking for.
I apologize if this is not the place to ask this but this project has to be done.
We are either looking someone to help us to it or send us like good examples on how to do it.
Thank you
For fetching data in Redux, you need to write a Redux middleware or use middleware wrapper like redux-saga or redux-observable, etc. I recommend you to use redux-observable. Take a look at this repo for how to build a todo app using React and Redux Observable.
About Redux middleware, I suggest you to read this article.

React data flow

I am trying to create a blog application and I am a bit confused on the data flow patterns of React.
Should I be trying to use something like Redux to store all of my posts after fetching the posts? Do I use local storage?
How do I then tell a component to render the 'expanded' version of the post? Is it better to re-use a 'post' component or should I just create two seperate components, one for the title and one for the full post?
I know it's two questions in one, but they kind of go together. Thanks in advance
Here's what I've found out about these topics after 6 months into my self-taught React journey.
In my opinion, React built-in features are more than enough to handle state for a small to medium applications (especially if you're working alone as a single developer).
If you turn to Redux right away, you'll have to learn this whole new pattern of handling state in a single immutable store and how to connect your components to it.
Since you will be most likely fetching data asynchronously, you'll need a helper library to work async on Redux: redux-thunk or redux-saga.
So right from the start, you'll have to add:
redux
react-redux
redux-thunk OR redux-saga
That is a lot of documentation to digest. It's perfectly doable, but I couldn't agree more with this quote:
don't solve problems that you don't have
It will be hard to learn those tools, since you've never faced the problems that they solve. Problems that you don't encounter just yet when you're starting to learn React.
Read this (from Redux creator):
https://medium.com/#dan_abramov/you-might-not-need-redux-be46360cf367
So, my recommendation to you:
Learn basic React (with classes):
https://reactjs.org/docs/getting-started.html
Then learn React Hooks (and you can basically forget about class components):
https://reactjs.org/docs/hooks-intro.html
Build your project using only React at first. And see how it goes. Then you can read more about Redux and what it does, and will be able to make a better choice on if you really need it or not.
From what you've told us about your project:
Keep a state for all your posts in a component high in the tree. Maybe inside the <App/> component itself.
Build your functions to fetch and update post data and update the state with the response.
Render how many components as you wish. Displaying full info about the post inside a BlogPostComponent or simplified version inside a BlogPostThumbnailCard with just the thumbnail and the title, for example.
If you want to be ready for the next versions of React and have a shorter code, you should try the hooks and avoid Classes
https://reactjs.org/docs/hooks-intro.html
You can organize your code as you want, but this is more interesting to have scalability with your components and reuse them with different properties

Using Context API in a project I would have previously used Redux in - async action creators?

So most of my projects are simple enough that Redux has been total overkill (even though it's worked really well always) - I am going to use Context API on a new project (it will easily do the job, and it's way easier to explain to other devs and get them going on) - Redux has Thunk to handle async actions. I think I understand things well enough to reason that async actions will not be a problem for Context API - Redux Thunk doesn't actually add async functionality to Redux - it simply makes the syntax more palatable. So my reasoning says that Context API will be able to handle any async actions as long as I write code to correctly deal with them. Is this right, or do I need to stick to Redux with Thunk if I want to handle async actions effectively?
I had similar question myself and came across this article that talks about a major difference between Redux and the Context API:
From https://www.academind.com/learn/react/redux-vs-context-api/
The Context API (currently) is not built for high-frequency updates (quote of Sebastian Markbage, React Team), it’s not optimized for that. The react-redux people ran into this problem when they tried to switch to React Context internally in their package.
My personal summary is that new context is ready to be used for low
frequency unlikely updates (like locale/theme). It’s also good to use
it in the same way as old context was used. I.e. for static values and
then propagate updates through subscriptions. It’s not ready to be
used as a replacement for all Flux-like state propagation. ---
Sebastian Markbage
So for the moment, it seems like you might want to look into using React Context for low-frequency updates (e.g. theme changes, user authentication) but not use it for the general state management of your application.
Hope this helps.

Using Redux in React JS Application

I know that there is so many answers in this question.
Anyone explain to me how Redux help your React JS Application more flexible when you are creating a Front End Web Apps.
Thank you in Advance.
From Redux documentation:
From the very beginning, we need to stress that Redux has no relation
to React. You can write Redux apps with React, Angular, Ember, jQuery,
or vanilla JavaScript.
That said, Redux works especially well with libraries like React and
Deku because they let you describe UI as a function of state, and
Redux emits state updates in response to actions.
It's a state management library with a huge ecosystem which lets you more easily set the state for your components across whole application, manage side-effects and many more.
I recommend redux author course about redux. At later part of the course, he explains how to use it with React.
Redux is used to manage the state of the component and it supports single state management system, where as flux is a multiple state management system.
Redux uses dispatchers to dispatch the payload(data) via reducers.

Need help understanding flow of react redux application

Took course on Udemy "Modern React and Redux" , Still not very clear about how data flows...
Please suggest How to Learn Reactjs and Redux,
What sources are best for basics?
How to start programming in reactjs?
In my opinion, the best source material concerning Redux and how to use it with React are these courses created by Dan Abramov (the creator of Redux).
https://egghead.io/courses/getting-started-with-redux
https://egghead.io/courses/building-react-applications-with-idiomatic-redux
The first course explains you what Redux is about, how it is made and how to use it.
The second course is more pratical, it shows you how to use it in a real application using React.
I personnally have learned how to use React and Redux using these two courses only.

Resources