Redux
Redux
ReduxはFluxに基づくステータス管理ライブラリであり、フェイスブック上でクライアントWebアプリケーションのために使用されるアプリケーションアーキテクチャである.
特長
中央化
Reduxはstoreという場所ですべての状態を管理します.これらの機能により、ステータスを管理する場所を考慮する必要がなくなり、ステータスを簡単に保存および使用できます.
読み取り専用ステータス
Ruduxはステータスを読み取り専用と見なします.ステータスを変更するには、一部のステータスではなく、ステータス全体を変更する必要があります.すなわち,勝手に状態を変更することはできず,actionを無条件に送信しなければならない.これにより、時間軸のように状態の変化をチェックしたり、以前の状態に戻ったりすることができます.
Reducer
アクションを扱う関数をReducerと呼ぶ.Reducerは情報を受信し、ステータスを更新する方法を定義します.これは純粋な関数でなければなりません.すなわち、非同期処理はできない.
Reduxの基本構造
const { createStore } = require("redux");
const initialState = {
count: 0,
};
const reducer = (prevState = initialState, action) => {
switch (action.type) {
case "INCREMENT":
return { count: prevState.count + 1 };
case "DECREMENT":
return { count: prevState.count - 1 };
default:
return prevState;
}
};
const increment = () => {
return {
type: "INCREMENT",
};
};
const decrement = () => {
return {
type: "DECREMENT",
};
};
const store = createStore(reducer, initialState);
store.dispatch(increment());
console.log(store.getState()); // { count: 1 }
store.dispatch(decrement());
console.log(store.getState()); // { count: 0 }
const { createStore } = require("redux");
const initialState = {
count: 0,
};
const reducer = (prevState = initialState, action) => {
switch (action.type) {
case "INCREMENT":
return { count: prevState.count + 1 };
case "DECREMENT":
return { count: prevState.count - 1 };
default:
return prevState;
}
};
const increment = () => {
return {
type: "INCREMENT",
};
};
const decrement = () => {
return {
type: "DECREMENT",
};
};
const store = createStore(reducer, initialState);
store.dispatch(increment());
console.log(store.getState()); // { count: 1 }
store.dispatch(decrement());
console.log(store.getState()); // { count: 0 }
createStore()
:Reduxが提供するstore作成関数reducer()
:actionの関数を受信して処理initialState
:storeの初期状態Reduxで分割
Reduxを使用すると、reduceとactionのコード量が増加し始めます.このため、複雑さを低減するために、以下の構造を採用することができる.UserとPostで例をあげましょう参考として,ノードモジュールシステムをノードとして動作させ,端末環境で検証した.
いったいこうぞう
.
├── actions
│ ├── post.js
│ └── user.js
└── reducers
├── index.js
├── post.js
├── reducer.js
└── user.js
action/user.jsconst logIn = (data) => {
return {
type: "LOGIN",
data,
};
};
const logOut = () => {
return {
type: "LOG_OUT",
};
};
module.exports = { logIn, logOut };
action/post.jsconst addPost = (data) => {
return {
type: "ADD_POST",
data,
};
};
module.exports = { addPost };
reducers/index.jsconst { createStore } = require("redux");
const reducer = require("./reducer");
const { logIn, logOut } = require("../actions/user");
const { addPost } = require("../actions/post");
const initialState = {};
const store = createStore(reducer, initialState);
store.subscribe(() => {
console.log("changed");
});
store.dispatch(
logIn({
id: 1,
name: "Leo",
admin: "true",
})
);
console.log("1: ", store.getState());
store.dispatch(addPost({ userId: 1, id: 1, content: "Hi, Redux" }));
console.log("2: ", store.getState());
store.dispatch(addPost({ userId: 1, id: 2, content: "Hi, Redux-thunk" }));
console.log("3: ", store.getState());
store.dispatch(logOut());
console.log("4: ", store.getState());
*reducers/reducer.jsconst { combineReducers } = require("redux");
const userReducer = require("./user");
const postReducer = require("./post");
module.exports = combineReducers({
user: userReducer,
post: postReducer,
});
combineReducers
Reduxという関数を提供し、reduce関数をマージします.const initialState = {
user: {
isLoggedIn: false,
data: null,
},
};
const userReducer = (prevState = initialState, action) => {
switch (action.type) {
case "LOGIN":
return {
...prevState,
user: {
isLoggedIn: true,
data: action.data,
},
};
case "LOG_OUT":
return {
...prevState,
user: {
isLoggedIn: false,
data: null,
},
};
default:
return prevState;
}
};
module.exports = userReducer;
reducers/post.jsconst initialState = [];
const postReducer = (prevState = initialState, action) => {
switch (action.type) {
case "ADD_POST":
return [...prevState, action.data];
default:
return prevState;
}
};
module.exports = postReducer;
Reference
この問題について(Redux), 我々は、より多くの情報をここで見つけました https://velog.io/@leo-xee/Reduxテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol