redux

作者: 半夜成仙 | 来源:发表于2020-07-16 22:59 被阅读0次

安装redux

npm install redux

Redux的组成

    就是我们传递的数据,那么我们在用React开发项目的时候,大致可以把State分为三类
    ●DomainDate: 可以理解成为服务器端的数据,比如:获取用户的信息,商品的列表等等
    ●UI State:决定当前UI决定展示的状态,比如:弹框的显示隐藏,受控组件等等
    ●App State: App级别的状态,比如:当前是否请求loading, 
                当前路由信息等可能被多个和组件去使用的到的状态
Action-事件
  Action是把数据从应用传到store 的载体,它是store数据的唯一来源,
  一般来说。我们可以通过 store.dispatch()将action传递给store
  Action特点:
      ●Action 的本质就是一个javaScript 的普通对象
      ●Action 对象内部必须要有一个type属性来表示要执行的动作
      ●多数情况下,这个type会被定义成字符串常量
      ●除了type字段之外。action的结构随意进行定义
      ●而我们在项目中,更多的喜欢用action创建函数(就是创建action的地方)
     ●只是描述了有事情要发生。井没有描述如何去更新state
image.png
Reducer
  Reducer本质就是一个函数,它用来响应发送过来的actions,然后经过处理,把state发送给Store的
  注意:在Reducer函数中,需要return返回值,这样Store才能接收到数据函数会接收两个参数,
第一个参数是初始化state.第二个参数是action
image.png
Store
  store就是把action与 reducer联系到一起的对象
主要职责:
  维持应用的state
  提供getState() 用于获取state
  提供dispatch() 用于发送action
  通过subscribe() 注册监听
  通过 subscribe()返回值来注销监听
image.png

案例

image.png
const action = {
    type: 'myredux',
    value: '我的第一个redux'
};
const  sengAction = ()=>{
    return action
}

module.exports={
    sengAction
}

image.png

const initState = {
    value:'我是默认的值'
}

const  reducer = (state = initState,action)=>{
    console.log('reducer_State',state)
    console.log('reducer_action',action)

    switch (action.type) {
        case 'myredux' :
                return  action;
        default :
                return state

    }

}
module.exports={
    reducer
}

image.png
import {createStore} from "redux";
//导入创建的reducer

import {reducer} from '../reducer'

//构建store
const store = createStore(reducer)

export default  store

image.png
import React from 'react'

// 导入store
import store from "../store";
// 导入action构造函数
import { sengAction} from '../action'

class name extends React.Component {

    onAction=()=>{
        let action = sengAction()

        // 发送action
        store.dispatch(action)

    }
    componentDidMount() {
        store.subscribe(()=>{
              this.setState({})
        })

    }


    render() {
        return (
           <div>
               <button onClick={this.onAction}>点击发送action</button>
               <h1>{store.getState().value}</h1>
           </div>
        )
    }
}

export {name as default}

相关文章

网友评论

      本文标题:redux

      本文链接:https://www.haomeiwen.com/subject/tmhvhktx.html