十九、Hello Redux

郁子大约 1 分钟约 336 字笔记React18Redux李立超

<!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 的操作指令

2.state 表示当前的 state

  • 可以根据这个 state 生成新的 state
  • 必须指定初始值(也可以在 createStore 调用时作为第二个参数传递)

3.action 是一个 js 对象,保存操作的信息

  • 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 });
});
上次编辑于: