React为什么需要Flux-like的库
从学习React到现在的一点感受我觉得应该有不少同学和我一样,上来学React,觉得甚是惊艳,看着看着,发现facebook 安利了一个 有没有想到,为什么要用Flux这类东西?本篇的定位是让大家知道有个脉络,所以不会太注意措辞的准确性. React的数据流向React只是一个view层的解决方案,光有界面没用,还得加上数据才行。React通过 有数据,就有数据通信的问题。react是单向数据流,父组件通过
组件的一些关系和相应的通信方式,官方有简单的说明,见文档 对于上面的 其实官方文档中,也有些小线索。
这段的关键是 **UX的关键构成梳理了一下,React需要配合
这些都是大家能想象到。好了,根据这几点,一个简单的 class Myux{ state:{},actionTypes:{},dispatch(){},subscribe(){} listeners:[] } 与上面四个组成部分项对应。来个例子吧,以计数器为例吧。 class CountStore{ static actionTypes:{ UP:'UP',//你英语好,你用increase DOWN:"DOWN" } state:0 //数据,计数开始是零 listeners:[] dispatch(actionType){ if(actionType === CountStore.actionTypes.UP){ this.state++; } if(actionType === CountStore.actionTypes.DOWN){ this.state--; } this.listeners.forEach((ln)=>{ ln(actionType,this,undefined)//对应什么动作,谁发出的,额外信息。 }) } subscribe(ln){ this.listeners.push(ln) //返回一个函数,调用,就取消注册 return ()=>{ const index = this.listeners.indexOf(ln); if(index !== -1){ this.listeners.splice(index,1) } } } } react的组件里,只要注册成listener,然后state发生变化,被通知到,调用 class CountComponent extends React.Component{ constructor(props,context){ super(props,context) const store = this.props.store; this.state = store.getState(); } componentDidMount(){ this.unsubscribe = store.subscribe((actionType,store)=>{ if(this.state !== store.getState()){ this.setState(store.getState()); } }) } componentWillUnmount(){ if(typeof this.unsubscribe === 'function'){ this.unsubscribe(); } } render(){ const state = this.state return <div>{state}</div> } } 使用吗,直接mount到body上,会报warning,忽略... const countStore = new CountStore() ReactDOM.render( <CountComponent store={countStore}/>,document.body ) 这样,只要在任何地方, 当然,如果只有一个组件用需要这个store,那么单纯代码上,这样写,要多写很多东西。但是谁知道以后页面不会加一个要共用这个store的组件,这时候这个 实际情况要复杂上面只有一个store,这是store还只有一个state,这个太简单了。实际,你的应用可能要维护多个状态。怎么办
这些分歧,加上函数式等,就导致了有 还有各个事件之间,有可能存在依赖关系,A事件后,B也触发。又要加 各种库特点大串烧redux的特点redux的文档里,有三大原则,有了上面的概念,我们来对照看一下
另外还有中间件系统。2、3两点,其实是函数式编程的基本概念, flux的特点单dispatch,多store多state,用 reflux多dispatch,多store多state。这个并没实际用过,看文档,应该是这样的。有问题,请提出。 后记现在有种趋势,传统的事件系统逐渐让大家觉得low b,functional reactive programming(FRP)高大上。 angular2中, 我觉得把,从能解决问题的复杂度上,FRP的确比传统的事件系统高级,但是概念也更多,不是特复杂的程序,这些概念只会增加你的开发难度,并且对后面维护的人要求更高。 Java那么多年,没 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |