十九、Hello Redux
大约 1 分钟约 336 字
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Hello Redux</title>
<script src="https://unpkg.com/redux@4.2.0/dist/redux.js"></script>
</head>
<body>
<div>
<button id="sub">减少</button>
<span id="countSpan">1</span>
<button id="add">增加</button>
<button id="addFive">增加5</button>
</div>
</body>
</html>
(一) 手动绑定值
const subBtn = document.getElementById("sub");
const addBtn = document.getElementById("add");
const countSpan = document.getElementById("countSpan");
let count = 1;
subBtn.addEventListener("click", () => {
count--;
countSpan.innerText = count;
});
addBtn.addEventListener("click", () => {
count++;
countSpan.innerText = count;
});
(二) 网页中使用 redux
1.步骤
- 引入
redux
核心包 - 创建
reducer
整合函数 - 通过
reducer
对象创建store
- 对
store
中的state
进行订阅 - 通过
dispatch
派发state
的操作指令
state
表示当前的 state
2.- 可以根据这个
state
生成新的state
- 必须指定初始值(也可以在
createStore
调用时作为第二个参数传递)
action
是一个 js
对象,保存操作的信息
3.type
表示操作的类型- 其他需要传递的参数,也可以在
action
中设置
const subBtn = document.getElementById("sub");
const addBtn = document.getElementById("add");
const addFiveBtn = document.getElementById("addFive");
const countSpan = document.getElementById("countSpan");
function reducer(state = { count: 1 }, action) {
switch (action.type) {
case "ADD":
return { ...state, count: state.count + 1 };
case "SUB":
return { ...state, count: state.count - 1 };
case "ADD_N":
return { ...state, count: state.count + action.payload };
default:
return state;
}
}
const store = Redux.createStore(reducer);
store.subscribe(() => {
countSpan.innerText = store.getState().count;
});
let count = 1;
subBtn.addEventListener("click", () => {
store.dispatch({ type: "SUB" });
});
addBtn.addEventListener("click", () => {
store.dispatch({ type: "ADD" });
});
addFiveBtn.addEventListener("click", () => {
store.dispatch({ type: "ADD_N", payload: 5 });
});