Javascript Redux替代方案

Javascript Redux替代方案,javascript,events,reactjs,redux,Javascript,Events,Reactjs,Redux,我最近开始学习React,很快就遇到了一个充满函数和状态的臃肿的父组件的问题。起初我研究了Flux,然后又研究了Redux,但这两种解决方案看起来都非常霸道 我想知道为什么没有这样做: //EventPropagator.js 设EventPropagator={ registerListener(listenerObject){ if(this.listeners==null) this.listeners=[] this.listeners.push(listenerObject) }, f

我最近开始学习React,很快就遇到了一个充满函数和状态的臃肿的父组件的问题。起初我研究了Flux,然后又研究了Redux,但这两种解决方案看起来都非常霸道

我想知道为什么没有这样做:

//EventPropagator.js
设EventPropagator={
registerListener(listenerObject){
if(this.listeners==null)
this.listeners=[]
this.listeners.push(listenerObject)
},
fireEvent(eventObject){
let listenerList=this.listeners.filter(函数(侦听器){
返回listener.eventType==eventObject.eventType
})
listenerList.forEach((侦听器)=>{
回调(eventObject.payload)
})
}
}
导出默认事件传播程序
使用:组件只需
registerListener
fireEvent

//main.js
从“./events/EventPropagator”导入EventPropagator
EventPropagator.registerListener({
“事件类型”:“随身携带”,
“回调”:(有效负载)=>{
//真的带着椰子吗
this.setState({“swallow_type”:payload.swallow})
控制台日志(有效负载)
}
})
EventPropagator.fireEvent({
“事件类型”:“随身携带”,
“有效载荷”:{“燕子”:“非洲”}
})
这将允许许多解耦,并且状态可以很容易地通过此类事件传递。这种方法的缺点是什么?

您应该试试

是一个状态管理库,它利用并成功地删除了不需要的代码。例如,mobx中没有
减速机的概念


希望这有帮助

需要的是一个事件驱动的系统,这样子组件就可以与其同级组件通信,但这并不意味着数据应该作为事件负载传递。这将导致一个没有治理的系统,对于一个有多个开发人员参与的项目来说,这将是一场噩梦

只要您遵循flux-like架构模式(GoogleIT),那么您实际上可以使用javascript和javascript对象来保存事件系统中的数据,从而成功地实现这一点

数据应被视为三种不同状态之一。要么是

  • 从服务器中提取的原始数据
  • 转换数据(从原始数据转换而来)
  • 存储数据。作为UI绑定到的模型的

  • 如果您编写一个javascript库来处理三种状态之间的数据移动并处理转换,那么您可以使用事件系统触发一个“存储已更改”事件,组件可以侦听并自行重新加载。

    Redux是React声明式编程风格的延续。将应用程序逻辑映射到组件的一种简单方法是使用类似于但使用redux的东西,这将允许您使用所有工具和中间件。在你的应用程序中也有不确定的转换,这使得调试更加容易。现在,我同意你无论如何都需要大量的接线和样板

    如果你想使用redux,你可以看看

    Redux auto:简化Redux(即插即用方法)

    删除设置存储和操作中的样板代码。为什么?此实用程序允许您在很短的时间内启动并运行Rudux

    您现在可以看到一个


    注意:我是这篇

    的作者,使用EventPropagator解决了通信问题,但不处理数据完整性。例如,如果有两个以上的组件侦听同一事件,并使用该事件的有效负载更新它们自己的状态。侦听相同事件的组件越多,确保所有这些组件在其自身状态中具有相同数据就越复杂

    其次,Flux/Redux提供单向数据流。一个简单的例子是大约两个组件A和B,从外部源(API或存储器)使用相同的数据X。用户可以与其中任何一个交互以获取最新的X数据。现在,如果用户要求B更新X,我们有两个解决方案与您的EventPropagator:

  • B将更新X本身,并触发一个事件来通知A关于更新的信息,以让A重新渲染。如果用户要求A更新X,则同样适用。这是双向数据流
  • B将向A触发一个事件,要求更新X,并等待A触发一个事件返回以获得更新X。如果用户要求A更新,A将自行执行并通知B。这是单向数据流
  • 一旦你的组件数量变大,并且交流不再局限于A和B之间,你可能只需要坚持使用上述两种解决方案中的一种,以避免你的应用程序逻辑失控。Flux/Redux选择了第二个,我们对此很满意


    如果您真的认为不需要另一个库来进行数据控制,那么应该查看。它提供了数据控件库可以拥有的最基本的功能,并且它只是React。请注意,您必须将项目的React版本更新为16.3才能使用此功能。

    如果您想利用所有Redux优势,请使用Redux

    如果您只想在React组件之间保持var同步,请使用Duix


    我是Duix的创造者。我已经用了一年了,最后,我在几个小时前发布了它。检查文档:

    有基于钩子的
    reatn

    与Redux相比,它更易于使用。
    检查并阅读

    另一个适度的多店选择是

    以下是一些功能:

    • 简单的decorators语法
    • 允许在组件中直接定义独立的存储逻辑
    • 通过组件树轻松连接存储
    • 允许模板化复杂/异步数据进程
    • 具有异步数据的SSR
      • 我写道。它只有25行代码,不需要样板文件,而且。。。我说过只有25行吗