FLUX PATTERN

REDUX ARCH
import {
createStore, applyMiddleware, combineReducers, compose,
} from 'redux';
import thunk from 'redux-thunk';
import * as reducers from './reducers';
const ext = window.__REDUX_DEVTOOLS_EXTENSION__;
const devtoolMiddleware =
ext && process.env.NODE_ENV === 'development' ? ext() : f => f;
const store = createStore(
combineReducers({
...reducers,
}),
compose(
applyMiddleware(thunk),
devtoolMiddleware
)
);import { configureStore, getDefaultMiddleware } from '@reduxjs/toolkit';
import * as reducers from './reducers';
const middleware = getDefaultMiddleware({
immutableCheck: false,
serializableCheck: false,
thunk: true,
});
export const store = configureStore({
reducer: { ...reducers },
middleware,
devTools: process.env.NODE_ENV !== 'production',
});@reduxjs/toolkit Create Store
Redux Create Store
export const PRODUCT_RELEASES_FETCHING = 'PRODUCT_RELEASES_FETCHING';
export const PRODUCT_RELEASES_FETCHED = 'PRODUCT_RELEASES_FETCHED';
export const PRODUCT_RELEASES_FETCHING_ERROR = 'PRODUCT_RELEASES_FETCHING_ERROR';
const productReleasesFetching = () => ({
type: PRODUCT_RELEASES_FETCHING
});
const productReleasesFetched = (productReleases) => ({
type: PRODUCT_RELEASES_FETCHED,
productReleases
});
const productReleasesFetchingError = (error) => ({
type: PRODUCT_RELEASES_FETCHING_ERROR,
error
});export const productReleasesFetching = createAction('PRODUCT_RELEASES_FETCHING');
export const productReleasesFetched = createAction('PRODUCT_RELEASES_FETCHED');
export const productReleasesFetchingError = createAction('PRODUCT_RELEASES_FETCHING_ERROR');
productReleasesFetching();
productReleasesFetched({ productReleases });
productReleasesFetchingError({ error });@reduxjs/toolkit Create Action
Redux Create Actions
function todosReducer(state = [], action) {
switch (action.type) {
case 'ADD_TODO': {
return state.concat(action.payload)
}
case 'TOGGLE_TODO': {
const { index } = action.payload
return state.map((todo, i) => {
if (i !== index) return todo
return {
...todo,
completed: !todo.completed
}
})
}
case 'REMOVE_TODO': {
return state.filter((todo, i) => i !== action.payload.index)
}
default:
return state
}
}const todosReducer = createReducer([], builder => {
builder
.addCase('ADD_TODO', (state, action) => {
state.push(action.payload)
})
.addCase('TOGGLE_TODO', (state, action) => {
const todo = state[action.payload.index];
todo.completed = !todo.completed
})
.addCase('REMOVE_TODO', (state, action) => {
return state.filter((todo, i) => i !== action.payload.index)
})
})@reduxjs/toolkit Create Reducer
Redux Create Reducer
case "UPDATE_VALUE":
return {
...state,
first: {
...state.first,
second: {
...state.first.second,
[action.someId]: {
...state.first.second[action.someId],
fourth: action.someValue
}
}
}
}updateValue(state, action) {
const {someId, someValue} = action.payload;
state.first.second[someId].fourth = someValue;
}@reduxjs/toolkit Reducer
Redux Reducer
const postsSlice = createSlice({
name: 'posts',
initialState: [],
reducers: {
createPost(state, action) {},
updatePost(state, action) {},
deletePost(state, action) {}
}
})@reduxjs/toolkit Slice
Redux Toolkit
By Sarhan Azizov
Redux Toolkit
- 351