首页/八方信息/正文
Redux入门配置:结合代码示例讲解其Action、reducer及store相关

 2025年09月03日  阅读 5

摘要:网上解析现状npminstallredux--savenpminstallreact-redux--save目前网上关于"链接"的抽象化解析较多,但具体到编程实现的代码示例相对匮乏。本文将跳过概念阐述,直接通过一个点击数字递增的案...

网上解析现状

npm install redux --save
    npm install react-redux --save

目前网上关于"链接"的抽象化解析较多,但具体到编程实现的代码示例相对匮乏。本文将跳过概念阐述,直接通过一个点击数字递增的案例,演示如何在项目中实际应用相关技术。

项目基础结构

假设读者已按照前文搭建好基础项目环境,核心代码位于app文件夹内。主要工作将在该目录下完成,保持与前期教程的目录结构一致性。

需求分析

- component -->放置组件的
   - redux     -->放置action && reducer
   - redux_lesson -->目前是放置用Provider打包出来的组件
   - main.js   -->程序入口

实现目标:创建一个包含数字0的div元素,点击时数字自动递增。需要明确三个关键要素:

1. View层显示数据(数字0)

2. 触发变更的操作(点击事件)

3. 数据变更机制

核心概念定义

state:驱动View变化的可变数据,本例中定义为数字变量

action:理解为改变state的"钥匙",本质是包含type字段的普通对象

state = {count:0}

reducer:处理变更的"加工车间",接收action和旧state,返回新state

store:整合前三者的管理中心,官方定义为"将它们联系到一起的对象"

代码实现步骤

increaseAction = {type:'increase'}

1. 定义初始state:{ count: 0 }

2. 创建action类型常量:const INCREMENT = 'INCREMENT'

3. 编写reducer函数处理逻辑:


function counter(state = 0, action) {
  switch (action.type) {
    case INCREMENT:
      return state + 1
    default:
  }
}

let reducer = (state={count:0},action)=>{
    //这里面传递进来两个参数,
    //一个是我们前面定义的state,如果木有传入的话,就用{count:0}
    //一个是我们前面定义的action,下面就要检查它的type来确定操作
    let count = state.count
    switch(action.type){
        //如果钥匙插对了孔,我们就返回进行了相应操作后的state对象
        case 'increase':
            return {count:count+1}
            break
        //如果钥匙都不对,就返回没操作过的state
        default:
            return state
    }
}

微信小程序开发之redux绑定_React-Redux配置_Redux入门教程

4. 创建store并绑定reducer:const store = createStore(counter)

视图层集成

在React组件中通过store.getState()获取数据,通过store.dispatch({ type: INCREMENT })触发更新。需要注意组件内需实现store订阅机制以响应状态变化。

架构优化方向

当前实现存在视图与逻辑耦合的问题。建议优化方案:

1. 将action creators抽离为独立函数

2. 使用react-redux库实现组件与store的连接

export const increaseAction = {type:'increase'}

3. 按功能模块拆分多个reducer,通过combineReducers整合

let reducer = (state={count:0},action)=>{
    let count = state.count
    switch(action.type){
        case 'increase':
            return {count:count+1}
            break
        default:
            return state
    }
}
export default reducer

工厂模式类比

将整个体系比喻为工业生产流程:

Store:集团公司总部(唯一)

'use strict'
import React from 'react'
import { createStore } from 'redux'
import { Provider,connect } from 'react-redux'
//这个index.js文件会在在下一步创建
import Index from '../component/index'
import reducers from '../redux/reducer'
//创建store
let store = createStore(reducers)
/*
  mapStatetoProps你可以理解成在下面connect的时候为组件提供一个props,这个props的值是redux的state
*/
let mapStatetoProps = (state) =>{
    return {count:state.count}
}
//连接你的state和最外层的组件
let Content = connect(mapStatetoProps)(Index)
let {Component} = React
//使用Provider来把新的App组件打包出来

Redux入门教程_微信小程序开发之redux绑定_React-Redux配置

class App extends Component{ render(){ return } } export default App

Reducer:下属各专业工厂

Action:进入特定工厂的准入钥匙

State:流水线产出的成品

'use strict'
import React from 'react'
import { connect } from 'react-redux'
//请注意这里面引入了action
import {increaseAction} from '../redux/action'
let {Component,PropTypes}  = React
class Index extends Component{
    //这一步是检查传入的各个prop类型是否正确
    ProTypes = {
        count:PropTypes.number.isrequired,}
    constructor(props){
        super(props)
    }
    handleClick(){
        /*
            这一步输入this.props可以看到,其实里面有两个东西
            在下面的render里面我们用到了this.props.count这个
            那么这里我们要用到dispatch
        */
        console.log(this.props)
        let {dispatch} = this.props
        //粗暴简单的使用
        dispatch(increaseAction)
    }
    render(){
        let {count} = this.props
        return 
{count}
} } //样式文件,不用细看 let styles = { circle:{ width:'100px',height:'100px',position:'absolute',left:'50%',top:'50%',margin:'-50px 0 0 -5px',borderRadius:'50px',fontSize:'60px',color:'#545454',backgroundColor:'#fcfcfc',lineHeight:'100px',textAlign:'center',} } export default Index

这种架构的优势在于:当业务复杂化时,可通过新增action类型和reducer处理分支来扩展功能,而不破坏既有代码结构。每个数据修改路径都有明确的action-reducer对应关系,便于维护和调试。

版权声明:本文为 “博览广文网” 原创文章,转载请附上原文出处链接及本声明;

原文链接:http://wen.bjhwtx.com/post/37744.html

标签:

博览广文网

博览广文网为所有文学爱好者、新闻爱好者、关注生活多方面内容的观众朋友提供多方位的内容呈现、提升阅读空间、填充碎片时间,开阔读者的视野、增长见识、了解民生、一个让您不出户尽知天下事的网站平台!
热门标签
关于我们
广文舒阅网—让天下读者有家可归!这里汇聚了各类优质文化信息,无论是全球热点、历史故事,还是实用百科、趣味探索,您都能轻松获取。我们希望用阅读点亮您的世界,让每一次浏览都充满收获和乐趣。
导航栏A标题
广文舒阅网
扫码关注
联系方式
全国服务热线:0755-88186625
Q Q:8705332
Email:admin@lanyu.com
地址:深圳市福田区海雅缤纷国际大厦5层501
Copyright 深圳市蓝宇科技有限公司 版权所有 备案号:京ICP备20013102号-1