前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redux使用总结

Redux使用总结

作者头像
用户1065635
发布2019-03-21 11:02:42
7510
发布2019-03-21 11:02:42
举报
文章被收录于专栏:前端社区前端社区前端社区

redux核心概念

store: 状态仓库,存放所有状态(很懒,只负责数据存取不负责计算) reducer: 计算者,根据action类型,计算并返回最新状态给store action: 通知,改变store内值唯一的方式

下载及安装

yarn add redux -D
yarn add react-redux -D

1.在项目内增加redux管理项目状态

创建redux必备3文件(redux架构), store.js actions.js reducers.js 创建 [ store.js ] [ reducers.js ] [ actions.js ] (内容可以先空,具体业务在来补充)

store.js

//1. 引入createStore
//2. 创建store并导出
import { createStore } from 'redux'
import reducers from './reducers'

export default createStore(reducers)

reducers.js

//1. 引入combineReducers
//2. 定义个小状态对应的reducer
//3. 使用combineReducers 合并小状态并导出
import { combineReducers } from 'redux'

//创建测试临时状态,正式使用时删除  从actions.js 获取到type命令 对应改变状态
function getActiveVal(state = '默认值' , action){
    switch(action.type){
        case 'TYPE值': return action.val //新增store处理
        default: return state
    }
}

export default combineReducers({
    //key(状态名) : value(此状态对应的reducer)
    getActiveVal
})

actions.js

//改变 getActiveVal 状态的值
export function setVal(key){
    return {
        type: 'TYPE值', // 传给 reducers.js  命令
        key      // 修改的状态数据
    }
}

2.在入口文件中 / 在顶级组件引入store和Provider组件,绑定Provider和store状态

//引入store(reudx状态机)
import store from './store/store'
//引入Provider中间容器,连接store和自己的组件
import { Provider } from 'react-redux'

<Provider store={store}>
    //内部所有子组件都能共享使用store的状态值
    //这里不要忘记,把自己的组件塞到Provider内
    <MainRouter />
</Provider>

3. 在子组件内,使用store的状态值

3.1 引入connect函数
import { connect } from 'react-redux'
3.2 书写filter函数具体内容,并真正注入数据
//过滤store数据,并注入到当前组件内,中间件会把完整的store注入到此函数内
function filter(store){
    console.log(store)
    //返回需要的数据(这里返回的数据会被自动注入到当前组件的props上)
    return {
        //key(状态名): value(状态值)
        test: store.test
    }
}
3.3 在组件导出时,使用connect注入数据
export default connect(filter)(Recommend)

4. 在组件内使用注入的状态机状态

//所有filter函数返回的数据,都会注入到当前组件的props上
this.props.注入的状态名
this.props.test

5. 在组件内修改状态机内的状态

//发送action是唯一改变store状态的途径
5.1 在actions.js内,创建对应action对象,并导出
//改变test状态的值
export function changeTest(val){
    return {
        type: 'CHANGE_TEST',
        val
    }
}
5.2 在reducers.js内,增加对应的状态处理case
//创建测试临时状态,正式使用时删除
function test(state = 'testVal', action){
    switch(action.type){
        case 'CHANGE_TEST': return action.val //新增store处理

        default: return state
    }
}
5.3 引入对应action对象

使用this.props.dispatch()发送action对象,让状态机改变状态

import { changeTest } from '../../store/actions'
this.props.dispatch(changeTest('新的值'))

注意

使用HashRouter进行前端跳转记录!!! 不要使用Browser路由,因为这个是服务器记录信息的路由

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • redux核心概念
    • 下载及安装
      • 1.在项目内增加redux管理项目状态
        • 2.在入口文件中 / 在顶级组件引入store和Provider组件,绑定Provider和store状态
          • 3. 在子组件内,使用store的状态值
            • 3.1 引入connect函数
            • 3.2 书写filter函数具体内容,并真正注入数据
            • 3.3 在组件导出时,使用connect注入数据
          • 4. 在组件内使用注入的状态机状态
            • 5. 在组件内修改状态机内的状态
              • 5.1 在actions.js内,创建对应action对象,并导出
              • 5.2 在reducers.js内,增加对应的状态处理case
              • 5.3 引入对应action对象
          相关产品与服务
          消息队列 TDMQ
          消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档