javascript - Redux 替代方案

标签 javascript events reactjs redux

<分区>

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

我想知道为什么没有完成这样的事情:

//EventPropagator.js
let EventPropagator = {
    registerListener(listenerObject){
        if (this.listeners == null)
            this.listeners = []
        this.listeners.push(listenerObject)
    },
    fireEvent(eventObject){
        let listenerList = this.listeners.filter(function(listener){
            return listener.eventType === eventObject.eventType
        })
        listenerList.forEach((listener) => {
            listener.callback(eventObject.payload)
        })
    }
}
export default EventPropagator

使用组件只需registerListenerfireEvent:

//main.js
import EventPropagator from './events/EventPropagator'

EventPropagator.registerListener({
    "eventType": "carry_coconut",
    "callback": (payload) => {
        // actually carry coconut
        this.setState({"swallow_type": payload.swallow})
        console.log(payload)
    }
})
EventPropagator.fireEvent({
    "eventType": "carry_coconut",
    "payload": { "swallow": "african" }
})

这将允许大量解耦,并且可以通过此类事件轻松传递状态。这种方法有什么缺点?

最佳答案

你应该试试 mobX

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

希望这对您有所帮助!

关于javascript - Redux 替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40517999/

相关文章:

javascript - 如何避免覆盖 JavaScript 中的列表元素?

javascript - 相对宽度子菜单 100% 标题宽度

javascript - 动态创建的元素上的事件绑定(bind)?

css - 下拉内容比下拉内容宽

javascript - enzyme .eq() 还是.index()?

javascript - 如何自动聚焦于 React 中的特定输入字段(单击另一个元素后)?

javascript - 如何在不指定完整 node_modules 路径的情况下从 npm 包中获取替代 js 文件

javascript - 我收到 'this is not a function' 错误

javascript - onclick 打开带有预设 html 的颜色框

javascript - 三次点击作为 React 上的事件?