مقدمه ای برای Redux – جامعه dev

این یک است مدیریت قابل پیش بینی دولت کتابخانه برای برنامه های جاوا اسکریپت ، که معمولاً با React استفاده می شود. این امر به مدیریت و متمرکز کردن وضعیت برنامه کمک می کند و باعث ایجاد تغییرات دولت قابل پیش بینی و اشکال زدایی می شود.
redux = زمینه API + usereducer
چرا از redux استفاده می کنیم؟
حالت متمرکز State Global State را در یک مکان واحد (فروشگاه Redux) ذخیره می کند
قابلیت پیش بینی inkans تغییرات دولت از قوانین سختگیرانه پیروی می کند و اشکال زدایی را آسان تر می کند
اشکال زدایی آسان تر → ابزارهایی مانند redux devtools به پیگیری تغییرات حالت کمک می کنند
مدیریت بهتر دولت → در برنامه های بزرگ با تعامل حالت پیچیده مفید است
مفاهیم اصلی redux
ذخیره
مکانی متمرکز برای نگه داشتن وضعیت برنامه.
اقدامات
اشیاء JavaScript ساده که توصیف می کنند چه چیزی باید در دولت تغییر کند.
کاهش دهنده
توابع خالص که نحوه تغییر دولت بر اساس اقدامات را مشخص می کند.
اعزام
اقدامات را برای به روزرسانی فروشگاه ارسال می کند.
انتخاب کنندگان
کارکردهایی که داده ها را از فروشگاه استخراج و قالب می کنند.
1) فروشگاه
این همه ایالت ها را در یک مکان کاملاً ذخیره می کند و دسترسی به همه مؤلفه ها را آسان تر می کند
store.js
import { configureStore } from '@reduxjs/toolkit';
import cartReducer from './cartSlice';
const store = configureStore({
reducer: {
cart: cartReducer,
},
});
export default store;
2) عمل
این یک شیء JavaScript ساده است که توصیف می کند چه اتفاقی باید در برنامه رخ دهد. اقدامات برای به روزرسانی دولت به کاهش دهنده ارسال می شود.
const addItem = (item) => ({
type: 'ADD_ITEM',
payload: item,
});
3) کاهش دهنده
- این تابعی است که تغییرات در حالت برنامه را تعیین می کند. از وضعیت فعلی و یک اقدام برای محاسبه و بازگشت یک حالت جدید استفاده می کند.
- می توان گفت مانند کنترل کننده Change شبیه به Handler Event
- از حالت اولیه و اقدامات موجود برای ایجاد یک حالت جدید استفاده می کند
4) برش
- این برای سازماندهی تمام کاهش دهنده ها برای هر صفحه وب به عنوان یک موجود جداگانه استفاده می شود
- ما می توانیم حالت های اولیه و کاهش دهنده ها را به همراه تماس های API اضافه کنیم
import { createSlice } from '@reduxjs/toolkit';
const cartSlice = createSlice({
name: 'cart',
initialState: {
cartProductIds: [],
},
reducers: {
addToCart: (state, action) => {
state.cartProductIds = [action.payload, ...state.cartProductIds];
},
removeFromCart: (state, action) => {
const indexOfId = state.cartProductIds.indexOf(action.payload);
if (indexOfId !== -1) {
state.cartProductIds.splice(indexOfId, 1);
}
},
clearAllItems: (state) => {
state.cartProductIds = [];
},
},
});
export const { addToCart, removeFromCart, clearAllItems } = cartSlice.actions;
export default cartSlice.reducer;
5) ارائه دهنده
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import store from './app/store';
import App from './App';
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('root')
);
1) در shector است
این برای استخراج حالت خاص از فروشگاه Redux استفاده می شود
const selectedData = useSelector((state) => state.someData);
2) استفاده شده
این برای ارسال اقدامات به فروشگاه Redux استفاده می شود
// src/features/cart/CartComponent.js
import React from 'react';
import { useSelector, useDispatch } from 'react-redux';
import { addToCart, removeFromCart, clearAllItems } from './cartSlice';
const CartComponent = () => {
const cartProductIds = useSelector((state) => state.cart.cartProductIds);
const dispatch = useDispatch();
return (
<div>
<h1>Cart</h1>
<ul>
{cartProductIds.map((id) => (
<li key={id}>
Product ID: {id}
<button onClick={() => dispatch(removeFromCart(id))}>Remove</button>
</li>
))}
</ul>
<button onClick={() => dispatch(clearAllItems())}>Clear All</button>
<button onClick={() => dispatch(addToCart(123))}>Add Product 123</button>
</div>
);
};
export default CartComponent;
Redux Thunk
این یک میانی نرم افزاری است که به شما امکان می دهد منطق ناهمزمان (مانند تماس های API) را در داخل اقدامات Redux بنویسید. این سازندگان اکشن را قادر می سازد تا به جای اشیاء ساده توابع را برگردانند.
import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';
// Define an async thunk to fetch data
export const fetchUser = createAsyncThunk(
'user/fetchUser',
async (userId) => {
const response = await fetch(`https://jsonplaceholder.typicode.com/users/${userId}`);
return response.json();
}
);
const userSlice = createSlice({
name: 'user',
initialState: { data: null, loading: false, error: null },
reducers: {},
extraReducers: (builder) => {
builder
.addCase(fetchUser.pending, (state) => {
state.loading = true;
})
.addCase(fetchUser.fulfilled, (state, action) => {
state.loading = false;
state.data = action.payload;
})
.addCase(fetchUser.rejected, (state, action) => {
state.loading = false;
state.error = action.error.message;
});
}
});
export default userSlice.reducer;
KING TOOLKIT (RTK)
این روش رسمی و توصیه شده برای نوشتن منطق Redux است. این مدیریت دولت را با کاهش کد دیگ بخار ، بهبود عملکرد و آسانتر کردن استفاده از Redux ساده می کند.
در ارتباط باشید!
اگر از این پست لذت بردید ، فراموش نکنید که برای به روزرسانی ها و بینش های بیشتر ، مرا در رسانه های اجتماعی دنبال کنید:
توییتر: ماداوگانسان
اینستاگرام: ماداوگانسان
LinkedIn: ماداوگانسان