zoukankan      html  css  js  c++  java
  • flux

    cnpm i flux -S
     
    Flux 是一种架构思想,专门解决软件的结构问题。它跟MVC 架构是同一类东西,但是更加简单和清晰。
    Flux的组成部分:
    View: 视图层
    ActionCreater(动作创造者):视图层发出的消息(比如mouseClick)
    Dispatcher(派发器):用来接收Actions、执行回调函数
    Store(数据层):用来存放应用的状态,一旦发生变动,就提醒Views要更新页面
    Flux 的最大特点,就是数据的"单向流动"。而数据双向绑定是通过v-module实现的效果;单项数据流使逻辑更加清晰;双向绑定是一个效果;



    Flux在2014年 facebook提出了,



    View->(userInterfaceaction)->Action->(action actionType)->Dispatcher->(method 接收action)->Store->(事件驱动event emiter)-> View
    用户点(ActionCreater)击按钮(view)创造action给dispatch,dispacther不能直接修改通过方法调用store的方法;当store更改后通过事件驱动(event emiter)修改view
    action是一个纯对象有actionType;调用dispatcher的方法,
    dispatcher接收到action,dispatch调用store的方法;store的方法触发自己的一个事件;该事件能够给所有用户发送一个方法;



    Flux的组成部分:
    1. 组件获取到store中保存的数据挂载在自己的状态上
    2. 用户产生了操作,调用actions的方法
    3. actions接收到了用户的操作,进行一系列的逻辑代码、异步操作
    4. 然后actions会创建出对应的action,action带有标识性的属性(type)
    5. actions调用dispatcher的dispatch方法将action传递给dispatcher
    6. dispatcher接收到action并根据标识信息判断之后,调用store的更改数据的方法
    7. store的方法被调用后,更改状态,并触发自己的某一个事件
    8. store更改状态后事件被触发,该事件的处理程序会通知view去获取最新的数据
     
    下面是一个简单的计数器案例:
    1. Store:
    //node自带的,让Store拥有绑定事件和触发事件的能力
    import { EventEmitter} from 'events' 
    
    //将方法传递给{}赋值给Store 
    const Store= Object.assign({},EventEmitter.prototype,{
        money:50000,
        getMoney(){
           return this.money
        }
        reduceMoney(){
            //7.更改状态,触发自己的某一个事件
            this.money = num,
            alert(num)
            this.$emit('change_money')
        }
        addEventLister(handler){
            this.on('money_change',handler)
        }
    })

    2. 组件father:

    import Store from './store'
    
    class  Father extends React.Component({
        constructor(props){
            super(props)
            this.state={
                money:Store.getMoney()
            }
            //减少性能的消耗
            this.buying = this.buying.bind(this)
        }
        buying(){
            <!-- alert('花钱') -->
            Action.helpUserBuying(10)
        }
        componentWillMount(){
            //8. store更改状态后事件被触发,该事件的触发程序通知view去获取最新的数据
                Store.addEventListener(function()){
                    this.setState({monney:Store.getMoney})
                }
        }
        render(){
            let {money} = this.state
            <p>我有{money}钱</p>
            <p><Button handler={this.buying}/></p>
        }
    })

    3. 无状态组件:函数

    const Button = (props)=>{
        return <button onClick={props.handler}></button>
    }

    4. Action: 相当于一个银行柜台

    
    import dispatcher from './dispather'
    import {DRAW_MONEY} from 'TYPE'
    const Action={//3.action接收到了用户的操作,进行一系列的逻辑代码运算
      //4. 然后action会创建出对应的action,action带有标识性的属性
      helpUserBuying(){
          let action={//
              type:'DRAW_MONEY',
              num:
          }
          //5. 传递带有action的
          dispatcher.dispatch(action)  //触发dispatcher方法
      }
    
      makeMoney(){
           let action={//
              type:'MAKE_MONEY',
              num:
          }
          dispatcher.dispatch(action) 
      }
    }
    export default action

    5.TYPE: 类型

    
    const DRAW_MONEY = 'DRAW_MONEY'
    const MAKE_MONEY = 'MAKE_MONEY'
    
    export {DRAW_MONEY}

    6.接受action

    import {Dispatcher} from 'flux'
    import {DRAW_MONEY} from 'TYPE'
    
    const dispathcher = new dispather
    dispatcher.register(function(action){
        console.log('action')
        switch(action.type){
            //6. dispatch接受到action传递的参数
            case DRAW_MONEY:
               Store.reduceMoney(action.num)
            case DRAW_MONEY:
               Store.makeMoney(action.num)
        }
    })
    
    export default dispathcher

    无状态组件:

    当我们使用某些组件的时候,发现,该组件不需要拥有自己的状态,只需要接受到外界传入的属性之后做出响应;不需要在引入class之类的,直接写事件就可以了;
  • 相关阅读:
    java 的 四 个 基 本 特 性 ——封装 继承 多态 抽象
    java中的对象 方法 引用 等一些抽象的概念是什么意思呢?
    谈谈java中的并发(一)
    来说说Java中String 类的那些事情
    Alibaba SpringCloud (一) Nacos 集群环境搭建
    Window 环境下SonarQube的安装与部署
    Windows 环境下MySQL 8.0.15 安装配置指南
    Docker 入门
    Springboot中,Tomcat启动war包的流程
    SpringCloud入门(十一):Sleuth 与 Zipkin分布式链路跟踪
  • 原文地址:https://www.cnblogs.com/naniandongzhi/p/8337645.html
Copyright © 2011-2022 走看看