Redux
JavaScriptアプリケーションのステータスの効率的な管理を支援するライブラリ
ステータスが変化したときに参照されるオブジェクト
アクションオブジェクトを作成するhelper関数
前の状態と動作を入力することで変化を引き起こす関数.
純真を授けなければならない.(戻り値はパラメータ値のみに依存し、常に同じ結果が出力されます)
状態の変化はReducerでしか起こりません
コンポーネント外部のStateリポジトリ
Reduser関数を呼び出し、動作に応じて状態を変更します.
注)))
https://velopert.com/3528
src/store/store.js
src/store/root-reducer.js
src/sotre/user/user-reducer.js
index.js
src/store/user/user.actions.js
stateはこの動作でのみ変更できます.
App.js
Navigation.jsx
主な概念
✔ Action
ステータスが変化したときに参照されるオブジェクト
{
type: "ADD_TODO",
payload: {
id: 0,
text: "redux"
}
}
動作をtypeで区切って、有効負荷の値で状態を更新します.✔ Action Creator
アクションオブジェクトを作成するhelper関数
const createAction = (type, payload) => ({ type, payload });
✔ Reducer
前の状態と動作を入力することで変化を引き起こす関数.
純真を授けなければならない.(戻り値はパラメータ値のみに依存し、常に同じ結果が出力されます)
状態の変化はReducerでしか起こりません
✔ Store
コンポーネント外部のStateリポジトリ
✔ Dispatch
Reduser関数を呼び出し、動作に応じて状態を変更します.
変化の傾向
注)))
https://velopert.com/3528
実際のプロジェクトに適用
ショップの作成
src/store/store.js
import { compose, createStore, applyMiddleware } from 'redux';
import logger from 'redux-logger';
import { rootReducer } from './root-reducer';
const middleWare = [logger];
const composedEnhancers=compose(applyMiddleware(...middleWare));
export const store = createStore(rootReducer,undefined,composedEnhancers);
ReducerをrootReducerとmiddleWareに組み合わせるスーパーユーザーの作成
src/store/root-reducer.js
import { combineReducers } from "redux";
import { userReducer } from "../contexts/user.context";
export const rootReducer=combineReducers({
user:userReducer,
});
ユーザー・レプリカの作成
src/sotre/user/user-reducer.js
import { USER_ACTION_TYPES } from './user.type';
const INITIAL_STATE = {
currentUser: null,
};
export const userReducer = (state=INITIAL_STATE, action) => {
const { type, payload } = action;
switch (type) {
case USER_ACTION_TYPES.SET_CURRENT_USER:
return {
...state,
currentUser: payload,
};
default:
return state;
}
};
以前Contextで使用していたreduceを使用します.アプリケーションストア
index.js
import { Provider } from 'react-redux';
import { store } from './store/store';
ReactDOM.render(
<React.StrictMode>
<Provider store={store}>
<BrowserRouter>
<UserProvider>
<CategoriesProvider>
<CartProvider>
<App />
</CartProvider>
</CategoriesProvider>
</UserProvider>
</BrowserRouter>
</Provider>
</React.StrictMode>,
document.getElementById('root')
Providerコンポーネントにstoreを入れます.アクションの作成
src/store/user/user.actions.js
import { USER_ACTION_TYPES } from './user.type';
export const setCurrentUser = (user) => ({
type: USER_ACTION_TYPES.SET_CURRENT_USER,
payload: user,
});
実際、これはstateをグローバルに変更する際に使用される動作です.stateはこの動作でのみ変更できます.
転送アクション(fire)
App.js
import { useDispatch } from 'react-redux';
import { setCurrentUser } from './store/user/user.action';
const App = () => {
const dispatch=useDispatch();
useEffect(() => {
const unsubscribe = onAuthStateChangedListener((user) => {
if (user) {
createUserDocumentFromAuth(user);
}
dispatch(setCurrentUser(user));
});
return unsubscribe;
}, []);
return (...)
}
react-reduxのuseDispatch hookを使用して、定義したactionをreducerに渡してステータスを変更します.ショップステータスのインポート
Navigation.jsx
import { useSelector } from 'react-redux';
import { selectCurrentUser } from '../../store/user/user.selector';
const Navigation = () => {
const currentUser = useSelector(selectCurrentUser);
return (...)
}
//user.selector.js
export const selectCurrentUser = (state) => state.user.currentUser;
react-redoxのuserSelector hookはコールバック関数を使用してstate内の特定のデータを返します.Reference
この問題について(Redux), 我々は、より多くの情報をここで見つけました https://velog.io/@wlsgkq123/Reduxテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol