轻松搞定-redux-1-原理-语法基础(二)

简介: redux对于初学者应该感觉还是非常难的,今天就试试能不能捋清楚头绪

5. 环境安装


学习的时候可以对比着vuex学习

安装指令


cnpm i -S redux

store公共存储区域

src/store/index.js


6. 完整的流程代码逻辑


6.1 典当掌柜 /管理员 创建


import { createStore } from 'redux' // 引入一个第三方的方法
const store = createStore() // 创建数据的公共存储区域(管理员)


6.2 账本,记录

创建一个记录本去辅助管理数据,也就是reduecer

本质就是一个函数,接收两个参数stateaction,返回state


let defaultState = {
    counter:0
}
function reducer(state = defaultState,action) {}


6.3可以将记录本传递给store,两者建立连接


const store = createStore(reducer)


6.4  拿到自己想要的 比如典当后的money

获取store里面的数据,则通过store.getState()来获取当前state


console.log(store.getState());



7. 更改 store数据


  1. 通过dispatch来派发action,通常action中都会有type属性,也可以携带其他的数据

一定要会类比学习 ,会vuex的 想着vuex ,

了解其他状态管理的也可以 类比

其实vuex本身也借鉴了 redux ,


store.dispatch({
  type: "INCREMENT"
})
store.dispath({
  type: "DECREMENT"
})
store.dispatch({
  type: "ADD_NUMBER",
  number: 5
})



8. 修改reducer中的处理逻辑


const reducer = (state = initialState, action) => {
  switch (action.type) {
    case "INCREMENT":
      return {...state, counter: state.counter + 1};
    case "DECREMENT":
      return {...state, counter: state.counter - 1};
    case "ADD_NUMBER":
      return {...state, counter: state.counter + action.number}
    default: 
      return state;
  }
}

注意

  1. reducer是一个纯函数,不需要直接修改state
    2.这样派发action之后,既可以通过store.subscribe监听store的变化

subscribe监听 变化


store.subscribe(() => {
  console.log(store.getState());
})



9. 完整代码如下



// 存储器:用来管理状态(获取状态 、修改状态) 管理员
import { createStore } from 'redux'
// 初始状态
let defaultState = {
    counter:0
}
// redux的核心配置,中间处理器 ,记录状态的改变
function reducer(state = defaultState,action) {
    console.log("reducer 执行了",action);
    switch (action.type) {
        case "A": {
            // 不修改state 
            let tempState = JSON.parse(JSON.stringify(state))
            // 修改
            tempState.counter = tempState.counter + action.value
            // 返回修改后的状态
            return tempState
        }
        case "B": {
          //非标准写法
            // 修改状态
            state.counter = state.counter - 1
            return state
        }
        default: {
            console.log("default",state);
            return state
        }
    }
}
// 创建 Redux store 来存放应用的状态。
// 需要状态配置信息参数(状态的初始值,以及修改状态的方法)
// 调用createStore的时候,reducer会被默认执行一次,完成对状态的初始化(执行里面的default)
let store = createStore(reducer)

永远不要在 reducer 里做这些操作

1.修改传入参数;

2.执行有副作用的操作,如 API 请求和路由跳转;

3.调用非纯函数,如 Date.now() 或 Math.random()


10.监听状态的改变


10.1三大原则

  1. 单一数据源
    整个应用的state被存储在一一棵object tree 中,并且这个object tree 中只存在唯一一个的store中.
  2. state是只读的
    唯一改变state的方式就是除非action,action是一个用于描述已发生事件的普通对象
  3. 使用纯函数来执行修改
    为了描述action 如何改变state tree,你需要编写reducers

10.2 简易写法


//vue这样写的 借鉴的就是redux
//  let store = createStore({
//      state:{},
//      mutations:{}
//  });
var n = 0
// 返回值
let unsubscribe = store.subscribe(() => {
    n++
    console.log(n,"--------------状态改了 ,我知道了哦")
})
// 一般在组件销毁的时候使用 unmounted
unsubscribe()
//  修改状态
// store.dispatch({type:"A"})
// store.dispatch({type:"A"})
store.dispatch({type:"B"})
store.dispatch({type:"A",value:10})
// 获取状态
console.log("-----------获取状态", store.getState());



11.引用



//入口index.js 引入
import "./store"



12. 总结


1.createStore可以帮助创建 store

2.store.dispatch 帮助派发 action ,action会传递给 store

3.store.getState 这个方法可以帮助获取store 里边所有的数据内容

4.store.subscrible 方法订阅store的改变,只要 store发生改变

5.store.subscrible 这个函数接收的这个回调函数就会被执行



相关文章
|
3月前
|
存储 移动开发 前端开发
探秘react,一文弄懂react的基本使用和高级特性
该文章全面介绍了React的基本使用方法与高级特性,包括JSX语法、组件化设计、状态管理、生命周期方法、Hooks使用、性能优化策略等内容,并探讨了Redux和React Router在项目中的集成与应用。
探秘react,一文弄懂react的基本使用和高级特性
|
7月前
|
XML 资源调度 前端开发
React基础知识点
React基础知识点
80 0
|
7月前
|
前端开发
【React学习】—类的基本知识(五)
【React学习】—类的基本知识(五)
|
JavaScript 前端开发 中间件
【react入门手册】学习react-redux,看这篇文章就够啦!
【react入门手册】学习react-redux,看这篇文章就够啦!
129 0
|
前端开发 JavaScript API
|
监控 JavaScript 前端开发
React-Redux 100行代码简易版探究原理
各位使用 react 技术栈的小伙伴都不可避免的接触过redux + react-redux的这套组合,众所周知 redux 是一个非常精简的库,它和 react 是没有做任何结合的,甚至可以在 vue 项目中使用。
|
前端开发 JavaScript C++
搞懂react hooks的原理和实现
搞懂react hooks的原理和实现
|
前端开发 JavaScript C++
彻底搞懂react hooks的原理和实现
彻底搞懂react hooks的原理和实现
291 31
|
前端开发 JavaScript API
前端知识库Reactjs系列三(hooks和高阶组件)
接着上一小节到内容,下面我们会来详细介绍上一节中提到到相关知识。本节我把reactjs hooks和高阶组件放在一起是因为这两块内容都是组件化中相关的内容。高阶组件使用过reactjs的人都应该有所了解,hooks是reactjs 16.8.0新增的属性。想再老项目中使用 hooks完全不用担心兼容性问题,因为hooks 是100% 向后兼容的。本节详细谈谈hooks的 使用方式以及相关概念。