资讯专栏INFORMATION COLUMN

「 React 」redux

kevin / 340人阅读

摘要:简介是一个独立专门用于做状态管理的库不是插件库它可以用在等项目中但演变至今基本与配合使用作用集中式管理应用中多个组件共享的状态如果不是比较复杂的组件间通信的情况下建议还是不使用因为会造成代码量的上升和复杂关键模块保存状态的主要部分共享的状态

简介

1) redux是一个独立专门用于做状态管理的JS库(不是react插件库)
2) 它可以用在react, angular, vue等项目中, 但演变至今基本与react配合使用
3) 作用: 集中式管理react应用中多个组件共享的状态

Tip:redux如果不是比较复杂的组件间通信的情况下,建议还是不使用,因为会造成代码量的上升和复杂

关键模块

Store

保存状态的主要部分,共享的状态数据保存在该对象中

Action Creators

工厂函数,主要用来生成action对象,传输更新的状态数据.

Reducers

接收action对象,对之前的状态和action中的新状态进行操作,并且返回新的结果存在store中.

关键函数

store.createStore()

创建store对象,参数传入reducers进行绑定.

store.dispatch()

分发action对象,传入reducers,进行状态的更新.

store.subscribe()

监听事件,当有状态改变时,会自动调用监听的方法(一般用来重新渲染方法)

使用示例 1.下载安装
//此处我使用的是yarn,后面两个后面介绍
yarn add redux  react-redux  redux-thunk
2.创建文件目录

3.各部分内容

store.js

import { createStore,applyMiddleware } from "redux"
import reducer from "./reducer"   //导入reducer进行绑定
import thunk from "redux-thunk"    //这是一个异步解析实现

export default createStore(reducer,applyMiddleware(thunk)); // 导出store对象

action-creator.js

import { INCREASE, DECREASE } from "./action-type"  //全局命名声明文件

// 不同的操作,返回action对象,type为标识,data为传输的数据
export const incresement = (data) => ({ type:INCREASE,data:data})  

export const decresement = (data) =>({type:DECREASE,data:data})

//模拟异步操作,返回的是主动进行分发操作的一个函数
export const incresementAsync = (data) => {
    return (dispatch) => {
      setTimeout(()=>{
        dispatch(incresement(data))
      },1000)
    }
    
}

reducer.js

import {INCREASE,DECREASE} from "./action-type"

//当有dispatch被调用时,会自动来遍历该模块中的所有函数,并进行匹配.
//previousState为之前的状态,action中包含着新的数据
export default function number(previousState = 0,action) {
    switch(action.type){
        case INCREASE:
        return previousState + action.data;
        case DECREASE:
        return previousState - action.data;
        default:
        return previousState;
    }
}

action-type.js

//声明定义了一些命名
export const INCREASE = "INCREASE";

export const DECREASE = "DECREASE";

App.js

import React, { Component } from "react"
import { connect } from "react-redux"
import { incresement, decresement,incresementAsync } from "./redux/action-creator"
class App extends Component {

// 进行更新操作
  increase = () => {
    this.props.incresement(1)
  }

  decrease = () => {
    this.props.decresement(1)
  }

  increaseAsync = () => {
    this.props.incresementAsync(1)
  }

  render() {
    return (
      
//获取状态值

click {this.props.number} times

) } } //关键在这里,这是简写的方式. //得益于react-redux,将创建action对象和dispatch的操作都进行了封装简化,并且封装了获取状态值. //不管是进行获取还是更新操作,都封装进了props属性中. export default connect( (state) => ({ number: state }), { incresement, decresement,incresementAsync } )(App)

index.js

import React from "react";
import ReactDOM from "react-dom";
import { Provider } from "react-redux"
import store from "./redux/store"
import App from "./App";

// 用Provider包装,就省略了用subscribe()监听的回调.
ReactDOM.render(, document.getElementById("root"));
react-redux

专门用来简化redux在react中使用的一个库.
它将原生redux的.getState(),创建action对象,dispatch等方法进行了封装.提供如上代码的简写方式.

redux-thunk

用来帮助解析异步操作.
只需要在创建store对象的时候用中间件包装的方式作为第二个参数传入即可.

扩展调试工具

redux-devtools-extension.

在谷歌商店中装好这个插件,然后在创建store对象的时候

import { createStore, applyMiddleware } from "redux";
import { composeWithDevTools } from "redux-devtools-extension";

const store = createStore(reducer, composeWithDevTools(
  applyMiddleware(...middleware),
  // other store enhancers if any
));
总结

redux在复杂项目中比较适合使用.它保存着一些多处需要共享的状态数据,在整个项目中比较方便进行状态数据的更新以及获取.

避免了一些层级比较多或者跨越了比较多级的同级兄弟组件需要互相通信的复杂过程.

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/103668.html

相关文章

  • react 前端项目技术选型、开发工具、周边生态

    摘要:更多参考通过库掌握函数组件有些时候,我们想要动态的加载一些组件按需加载,比如在一个单页面应用中页面的组件页面的组件页面的组件只有真正要实例化当前页面的时候,才会去加载相应的组件。 react 前端项目技术选型、开发工具、周边生态 声明:这不是一篇介绍 React 基础知识的文章,需要熟悉 React 相关知识 主架构:react, react-router, redux, redux...

    hersion 评论0 收藏0
  • react 前端项目技术选型、开发工具、周边生态

    摘要:更多参考通过库掌握函数组件有些时候,我们想要动态的加载一些组件按需加载,比如在一个单页面应用中页面的组件页面的组件页面的组件只有真正要实例化当前页面的时候,才会去加载相应的组件。 react 前端项目技术选型、开发工具、周边生态 声明:这不是一篇介绍 React 基础知识的文章,需要熟悉 React 相关知识 主架构:react, react-router, redux, redux...

    kidsamong 评论0 收藏0
  • React手稿之 React-Redux

    摘要:属性是必须的。需要一个与的一致。必须在的返回原。调试插件日志安装组件。然后加入到中即可例如扩展程序需要在应用市场安装然后在中使用增强功能将加入即可在线实例推荐阅读手稿 React-Redux Redux Action function addTodo(text) { return { type: ADD_TODO, text } } type 属性是必须的。...

    Freelander 评论0 收藏0
  • react-redux

    摘要:主要用于构建,被认为是中的视图。高效通过对的模拟,最大限度地减少与的交互。也就是说,用户负责视觉层,状态管理则是全部交给它。该回调函数必须返回一个纯对象,这个对象会与组件的合并。 React 定义: React 是一个用于构建用户界面的 JAVASCRIPT 库。React主要用于构建UI,React 被认为是 MVC 中的 V(视图)。 特点: 声明式设计 −React采用声明范式...

    sanyang 评论0 收藏0
  • react开发教程(十)redux结合react

    摘要:描述和之间没有关系。但是还是比较适合和搭配的,因为允许你以的形式来描述界面,而非常擅长控制的变化。应用中应有且仅有一个。只需要在渲染根组件时使用即可。创建上一篇开发教程九基础 描述 Redux 和 React 之间没有关系。Redux 可以搭配 React、Angular 甚至纯 JS。但是 Redux 还是比较适合和 React 搭配的,因为 React 允许你以 state 的形式...

    jsliang 评论0 收藏0

发表评论

0条评论

kevin

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<