React中的一个状态管理工具—Flux

简介: React中的一个状态管理工具—Flux

Flux出现的原因


Flux的出现和传统MVC有关,因为传统的MVC架构没有解决,M和V之间的交互关系


为了弥补这个缺陷,人们相处了 Flux Redux Mobx 这样三种架构思维 , 那么React只是这三种架构的一个组成部分,那么这个组成部分充当的是 View( 视图 )


注意: Flux Redux Mobx 和 MVC 是同一级别的,相比之下, vuex级别要小的多 ,但是他们解决的都是多组件状态共享


问题:我想在Redux中使用vue , 可以吗? 可以的

Flux案例书写

案例中:点击 计数

要想使用FLux架构思维,需要通过一个工具进行使用, 这个工具就是flux

所以,我们需要安装Flux依赖-生产环境

yarn add flux

在src目录下 新建store目录,里面新建index.js

为什么store要拿到on和emit方法?

答:数据改变,视图更新( 要靠事件来执行,也就是要进行事件的订阅和发布 )

/*
  当前的index.js文件就是 我们 flux组成部分中  store 
  store的功能:
    1. 数据的存储者
    2. 数据改变,视图更新( 要靠事件来执行,也就是要进行事件的订阅和发布 )
 */
const EventEmitter = require( 'events' ).EventEmitter
// console.log(EventEmitter.prototype)  //打印发现on和emit方法在EventEmitter.prototype上
//将on和 emit解构在
const store = {
    ...EventEmitter.prototype,
    state : {
        count : 0
    },
    getState () {
        return this.state
    }
}
export default store

将store中的数据显示在组件(视图)中

import store from './store'
class App extends React.Component {
  constructor () {
    super()
    this.state={
      count : store.getState().count
    }
  }
  render () {
    let { count } = this.state
    return (
        <div className="App">
            <p>count为: { count }</p>
        </div>
      )
  }
}
export default App;

用户操作,用户点击按钮,执行当前组件中的方法,这个方法的逻辑实际上是actionCreators中的方法

创建actionCreators.js

import * as type from './type'
import dispatcher from './dispatcher'
const actionCreators = {
    increment () {
        //创建动作
        let actions = {
           type : type.INCRMENT   
        }
        //dispatcher来通过dispatch 发送 actions
        dispatcher.dispatch( actions )
    }
}
export default actionCreators

再建立dispatcher.js

import { Dispatcher } from 'flux'
import * as type from './type'
import store from './index'
const dispatcher = new Dispatcher()
//dispatcher.register( callback )
dispatcher.register( (actios) => {
    switch( actios.type ) {
        case type.INCRMENT:
            store.state.count++;
            break;
        default:
            break;
    }
})
export default dispatcher

通过store的事件的发布和订阅进行 当前组件中 state 的重新赋值


当我们点击按钮是,要通过store的事件的订阅给当前组件的state重新赋值,要想这样做,我们必须进行事件的发布

难点: 这个事件的发布往哪里写?

组件的生命周期中,数据可以进行一次修改的可以往 componentWillMount // componentDidMount

难点: 这个事件的订阅那里写?

当我们点击按钮的时候,就要修改当前组件的state,也就是要进行事件的订阅

最后的步骤:

  1. 引入 actionCreators
  2. 事件订阅
  3. 事件发布
import React from 'react';
import store from './store'
import actionCreators from './store/actionCreators'
class App extends React.Component {
  constructor () {
    super()
    this.state={
      count : store.getState().count
    }
  }
  increment () {
    actionCreators.increment()
    store.emit('count')//事件发布
  }
  componentDidMount () {//在组件装载前有一次修改数据的机会
    store.on('count',()=>{//事件订阅
      this.setState({
        count : store.getState().count
      })
    })
  }
  render () {
    let { count } = this.state
    return (
        <div className="App">
            <button onClick={ this.increment }>count+</button>
            <p>count为: { count }</p>
        </div>
      )
  }
}
export default App;

f8b9796a47b8edf1f7da70213e82663e.gif



相关文章
|
1月前
|
前端开发 JavaScript API
探索React Hooks:前端开发的革命性工具
【10月更文挑战第5天】探索React Hooks:前端开发的革命性工具
|
21天前
|
监控 前端开发 JavaScript
React 静态网站生成工具 Next.js 入门指南
【10月更文挑战第20天】Next.js 是一个基于 React 的服务器端渲染框架,由 Vercel 开发。本文从基础概念出发,逐步探讨 Next.js 的常见问题、易错点及解决方法,并通过具体代码示例进行说明,帮助开发者快速构建高性能的 Web 应用。
56 10
|
1月前
|
前端开发 JavaScript API
利用React Hooks简化状态管理
【10月更文挑战第1天】利用React Hooks简化状态管理
|
1月前
|
存储 前端开发 JavaScript
利用React Hooks简化状态管理
【10月更文挑战第1天】利用React Hooks简化状态管理
38 3
|
1月前
|
前端开发 JavaScript 网络架构
实现动态路由与状态管理的SPA——使用React Router与Redux
【10月更文挑战第1天】实现动态路由与状态管理的SPA——使用React Router与Redux
32 1
|
2月前
|
前端开发 JavaScript API
深入探索React Hooks与状态管理
深入探索React Hooks与状态管理
44 2
|
1月前
|
前端开发 JavaScript
深入理解前端状态管理:React、Redux 和 MobX
【10月更文挑战第7天】深入理解前端状态管理:React、Redux 和 MobX
38 0
|
3月前
|
开发者 安全 UED
JSF事件监听器:解锁动态界面的秘密武器,你真的知道如何驾驭它吗?
【8月更文挑战第31天】在构建动态用户界面时,事件监听器是实现组件间通信和响应用户操作的关键机制。JavaServer Faces (JSF) 提供了完整的事件模型,通过自定义事件监听器扩展组件行为。本文详细介绍如何在 JSF 应用中创建和使用事件监听器,提升应用的交互性和响应能力。
37 0
|
3月前
|
开发者
告别繁琐代码,JSF标签库带你走进高效开发的新时代!
【8月更文挑战第31天】JSF(JavaServer Faces)标准标签库为页面开发提供了大量组件标签,如`&lt;h:inputText&gt;`、`&lt;h:dataTable&gt;`等,简化代码、提升效率并确保稳定性。本文通过示例展示如何使用这些标签实现常见功能,如创建登录表单和展示数据列表,帮助开发者更高效地进行Web应用开发。
43 0
|
3月前
|
容器 Kubernetes Docker
云原生JSF:在Kubernetes的星辰大海中,让JSF应用乘风破浪!
【8月更文挑战第31天】在本指南中,您将学会如何在Kubernetes上部署JavaServer Faces (JSF)应用,享受容器化带来的灵活性与可扩展性。文章详细介绍了从构建Docker镜像到配置Kubernetes部署全流程,涵盖Dockerfile编写、Kubernetes资源配置及应用验证。通过这些步骤,您的JSF应用将充分利用Kubernetes的优势,实现自动化管理和高效运行,开启Java Web开发的新篇章。
54 0