Ortaq vəziyyətin axını
Uzaq komponentlər eyni məlumatı paylaşanda əvvəl state-i ortaq valideynə qaldırmağı düşün. Daha mürəkkəb ortaq axında Redux store vəziyyəti saxlayır. Komponent action dispatch edir, reducer növbəti vəziyyəti hesablayır, selector lazımi hissəni oxuyur.
import { configureStore, createSlice } from '@reduxjs/toolkit';
import { Provider, useDispatch, useSelector } from 'react-redux';
const cart = createSlice({
name: 'cart', initialState: { items: [] },
reducers: {
added(state, action) { state.items.push(action.payload); },
removed(state, action) {
state.items = state.items.filter(item => item.id !== action.payload);
}
}
});
const store = configureStore({ reducer: { cart: cart.reducer } });
function Basket() {
const items = useSelector(state => state.cart.items);
const dispatch = useDispatch();
const total = items.reduce((sum, item) => sum + item.price, 0);
return <section><p>Cəm: {total} AZN</p>
<button type="button" onClick={() => dispatch(cart.actions.added({
id: crypto.randomUUID(), title: 'Çanta', price: 25
}))}>Məhsul əlavə et</button>
<ul>{items.map(item => <li key={item.id}>{item.title}
<button type="button" onClick={() => dispatch(cart.actions.removed(item.id))}>Sil</button>
</li>)}</ul>
</section>;
}
export default function App() { return <Provider store={store}><Basket /></Provider>; }
Müasir və klassik API-lər
Redux Toolkit-də createSlice Immer vasitəsilə mutasiya kimi görünən koddan dəyişməz yeniləmə hazırlayır. Adi reducer-də və React state-də bu icazə yoxdur. Klassik kodda createStore, connect, mapStateToProps və mapDispatchToProps ilə rastlaşa bilərsən; yeni Redux kodu üçün Toolkit və Hook-larla başla.
Formanın müvəqqəti input dəyəri yerli state-də qala bilər: Redux hər şeyi store-a daşımaq tələbi deyil. Asinxron məntiq reducer-in içində yox, məsələn thunk kimi middleware axınında işlədilir. configureStore standart olaraq thunk dəstəyi verir; thunk dispatch və getState qəbul edib işi əlaqələndirə bilir.