Friday, March 24, 2023

What is Redux in React TS ?

 Redux is a state management library that can be used with React (and other JavaScript frameworks) to manage the state of an application in a predictable and scalable way. Redux provides a centralized store for the state of an application, and allows components to access and update that state in a consistent manner.

In TypeScript, Redux can be used to manage the types of the state and the actions that modify that state. This helps to catch type-related errors at compile time, rather than at runtime.

To use Redux in a React TypeScript project, you will typically need to install the required dependencies (including redux and react-redux), create a Redux store with an initial state and reducers, and connect your React components to the store using the connect higher-order component. You may also use thunk middleware to handle asynchronous actions.

Here's an example of how you might use Redux in a React TypeScript project:


// Define the initial state and actions interface AppState { count: number; } interface IncrementAction { type: 'INCREMENT'; } interface DecrementAction { type: 'DECREMENT'; } type AppAction = IncrementAction | DecrementAction; // Create the reducers to modify the state based on actions function appReducer(state: AppState, action: AppAction): AppState { switch (action.type) { case 'INCREMENT': return { count: state.count + 1 }; case 'DECREMENT': return { count: state.count - 1 }; default: return state; } } // Create the Redux store with the initial state and reducers import { createStore } from 'redux'; const initialState: AppState = { count: 0 }; const store = createStore(appReducer, initialState); // Connect the React component to the store using the connect HOC import { connect } from 'react-redux'; interface AppProps { count: number; increment: () => void; decrement: () => void; } function App({ count, increment, decrement }: AppProps) { return ( <div> <p>Count: {count}</p> <button onClick={increment}>Increment</button> <button onClick={decrement}>Decrement</button> </div> ); } export default connect( (state: AppState) => ({ count: state.count }), { increment: () => ({ type: 'INCREMENT' }), decrement: () => ({ type: 'DECREMENT' }) } )(App);

In this example, we define the initial state of the application as an object with a count property. We also define two actions (IncrementAction and DecrementAction) that can modify the state of the application.

We then create a reducer function (appReducer) that takes the current state and an action, and returns a new state based on the action. We also create the Redux store with the initial state and the appReducer.

We define a React component (App) that displays the current count and provides buttons to increment and decrement the count. We use the connect higher-order component to connect the App component to the Redux store, and pass in the increment and decrement actions as props.

With this setup, when the user clicks the "Increment" button, the increment action is dispatched to the Redux store, which then calls the appReducer function to update the state of the application. The updated state is then passed down to the App component as a prop, causing it to re-render with the updated count.





No comments:

Post a Comment