0
点赞
收藏
分享

微信扫一扫

React - 27 redux基础操作和思想

1.redux

React - 27  redux基础操作和思想_react

React - 27  redux基础操作和思想_react_02

React - 27  redux基础操作和思想_react_03

React - 27  redux基础操作和思想_react_04

React - 27  redux基础操作和思想_react_05

2.redux的使用

React - 27  redux基础操作和思想_react_06

除了上述5步,还需要其他知识配合

React - 27  redux基础操作和思想_react_07


React - 27  redux基础操作和思想_react_08

src/store/index.js

import { createStore } from "redux";

// 管理员:修改store容器中的公共状态
let initial = {
  supNum: 10,
  oppNum: 5
}
const reducer = function reducer(state = initial, action) {
  // state:存储STORE容器中的公共状态「最开始没有的时候,赋值初始状态值initial」
    // action:每一次基于dispatch派发的时候,传递进来的行为对象「要求必须具备type属性,存储派发的行为标识」
    // 为了接下来的操作中,我们操作state,不会直接修改容器中的状态「要等到最后return的时候」,我们需要先克隆
    state = { ...state };
    // 接下来我们需要基于派发的行为标识,修改STORE容器中的公共状态信息
    switch (action.type) {
        case 'VOTE_SUP':
            state.supNum++;
            break;
        case 'VOTE_OPP':
            state.oppNum++;
            break;
        default:
    }
    // return的内容,会整体替换STORE容器中的状态信息
    return state
}
// 创建store公共容器
const store = createStore(reducer)
export default store

为了在各个组件中,都可以把创建的store获取到,我们可以基于上下文的方案:

1.在index.isx中,基于ThemeContextProvider把创建的store放在上下文中

2.因为所有组件最后都是在index.jsx中渲染,所有组件都可以理解为

index.jsx的后代组件,基于上下文方案,获取在上下文中存储的store就可以了!!!

React - 27  redux基础操作和思想_react_09

Vote.jxs

这种写法不行,函数组件只会更新一次

React - 27  redux基础操作和思想_react_10

修改-->

React - 27  redux基础操作和思想_react_11

再次修改

React - 27  redux基础操作和思想_react_12

import React, { useContext, useState, useEffect } from "react";
import './Vote.less';
import VoteMain from './VoteMain';
import VoteFooter from './VoteFooter';
import ThemeContext from "../ThemeContext";

const Vote = function Vote() {
    const { store } = useContext(ThemeContext);
    // 获取容器中的公共状态
    let { supNum, oppNum } = store.getState();

    /* // 组件第一次渲染完毕后,把让组件更新的方法,放在STORE的事件池中
    let [num, setNum] = useState(0);
    const update = () => {
        setNum(num + 1);
    };
    useEffect(() => {
        // let unsubscribe = store.subscribe(让组件更新的方法)
        //   + 把让组件更新的方法放在STORE的事件池中
        //   + 返回的unsubscribe方法执行,可以把刚才放入事件池中的方法移除掉
        let unsubscribe = store.subscribe(update);
        return () => {
            unsubscribe();
        };
    }, [num]); */
    let [_, setNum] = useState(0);
    useEffect(() => {
        store.subscribe(() => {
            setNum(+new Date());
        });
    }, []);

    return <div className="vote-box">
        <div className="header">
            <h2 className="title">React是很棒的前端框架</h2>
            <span className="num">{supNum + oppNum}</span>
        </div>
        <VoteMain />
        <VoteFooter />
    </div>;
};

export default Vote;

VoteMain.jsx

React - 27  redux基础操作和思想_react_13

VoteFooter.jsx

React - 27  redux基础操作和思想_react_14

3.总结:

redux具体的代码编写顺序

1.创建store,规划出reducerT当中的业务处理逻辑可以后续不断完善,但是最开始reducer的这个架了需要先搭建取来]

2.在入口中,基于上下文对象,把store放入到上下文中;需要用到store的组件,从上下文中获取! !3.组件中其丁store,完成公共状态的获取、和任务的派发+ 使用到公共状态的组件,必须向slore的事件池中加入让组件更新的办法;只有这样,才可以确保,公共状态改变,可以让组件更新,才可以获取最斯的状态进行绑定!!

举报

相关推荐

0 条评论