Friday, March 24, 2023

Redux createSlice vs createStore ?

 createSlice and createStore

are two different functions provided by the Redux library.

createStore is the core function of Redux that is used to create a Redux store, which is responsible for holding the entire state tree of the application. The store is created by passing a reducer function to createStore, which is responsible for specifying how the state tree is updated in response to actions.

On the other hand, createSlice is a utility function provided by the @reduxjs/toolkit package that simplifies the process of defining Redux reducers. It allows you to define a reducer function, initial state, and action creators all in one place. When you call createSlice, it generates a slice of the Redux store that contains the reducer function and action creators.

Using createSlice can help reduce the amount of boilerplate code required to define Redux reducers, and can make it easier to follow the principles of Redux by enforcing immutability and reducing the amount of manual bookkeeping required.

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

import { configureStore, createSlice } from '@reduxjs/toolkit'; // Define the initial state interface AppState { count: number; } const initialState: AppState = { count: 0 }; // Define the reducer function and action creators using createSlice const counterSlice = createSlice({ name: 'counter', initialState, reducers: { increment(state) { state.count++; }, decrement(state) { state.count--; }, }, }); // Create the Redux store using configureStore const store = configureStore({ reducer: counterSlice.reducer, }); // Connect the React component to the store using the useSelector and useDispatch hooks import { useSelector, useDispatch } from 'react-redux'; function App() { const count = useSelector((state: AppState) => state.count); const dispatch = useDispatch(); return ( <div> <p>Count: {count}</p> <button onClick={() => dispatch(counterSlice.actions.increment())}>Increment</button> <button onClick={() => dispatch(counterSlice.actions.decrement())}>Decrement</button> </div> ); } export default App;

In this example, we define the initial state of the application as an object with a count property. We then define the reducer function and action creators using createSlice, which generates a slice of the Redux store that contains the reducer function and action creators.

We create the Redux store using configureStore, and pass in the reducer function generated by counterSlice.reducer.

We then define a React component (App) that displays the current count and provides buttons to increment and decrement the count. We use the useSelector hook to select the count property from the Redux store, and the useDispatch hook to dispatch the increment and decrement actions when the buttons are clicked.

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


which one is recommended for latest version react ?


Both createSlice and createStore are recommended for use with the latest version of React and Redux.

createSlice is a newer addition to the Redux library and provides a more concise and intuitive way to define reducers. It is recommended for use with small to medium-sized applications where the state is not too complex.

createStore, on the other hand, is the core function of Redux and is used to create the store that holds the entire state tree of the application. It is recommended for use in larger applications where the state is more complex and requires more advanced handling.

In general, it is recommended to use createSlice when possible as it simplifies the process of defining reducers and makes the code easier to read and maintain. However, createStore is still a crucial part of the Redux library and may be necessary for more advanced use cases.







No comments:

Post a Comment