reactjs – 当一个React Flux商店发出多种事件时,这是否是一个很好的选择?

几乎所有我发现的关于助焊剂的教程每个商店只会发生一个事件(emitChange)。我真的不知道,这是有意的,还是教程简单的结果。

我尝试实现一个对应于CRUD架构的商店,我想知道是否是一个很好的设计决定,为每个CRUD方法发出不同的事件。

我的一家商店的相关部分如下所示:

var UserStore = _.extend({},EventEmitter.prototype,{

    emitChange: function() {
        this.emit('change');
    },emitUserAdded: function() {
        this.emit('userAdded');
    },emitUserUpdated: function() {
        this.emit('userUpdated');
    },emitUserDeleted: function() {
        this.emit('userDeleted');
    },// addListener,removeListener in the same manner
});

如果我的方法是错误的,我将如何告诉我的组件事件的类型,发生(例如:删除或更新)

作为设计模式的助焊剂建立在所有数据位于“存储”中的想法之上。每个商店保存给定信息域的数据。例如:在Flux中,所有注释将驻留在CommentStore中。

当数据在存储中更改时,它应该发出一个事件,并且构建在这个“信息域”之上的所有组件应该重新渲染并显示新的域数据。

我发现,当商店发布多个事件类型时,组件更有可能不监听该特定事件,因此在域数据更改时不会自动重新登录。

这打破了整个通量模式,并且可以轻松地创建难以找到组件与商店信息不同步的错误。

我建议您从“Demeter法”中设计您的组件 – 每个组件只应该知道它需要多少。

因此,您可以创建一个在单个存储事件上侦听的commentListComponent来代替监听“commentList已更新”的事件的组件。因此,组件将侦听commentStore.on(‘change’) – 我通常让所有商店发出一个’change’事件。当商店发出时,您应该在commenListComponent中复原数据以反映商店。如果您使用React,则可以使用setState。

var commentStore = _.extend({},{

updateComents: function() {
    // Update comments and emit
    this.emit('change');
},removeComments: function() {
    // Remove comments and emit
    this.emit('change');
},getState: function() {
    return {
        comments: this.comments,someOtherDomainData: this.meta,}
}
});

//commentListComponent.js
var commentListComponent = React.createClass({
    componentDidMount : function() {
        commentStore.on('change',this._commentChanged);
    },componentWillUnmount : function() {
        commentStore.off('change',_commentChanged : function() { 
        this.setState({ comments : commentStore.getState().comments });
    },render : function() {
        var comments = // Build a list of comments.
        return <div>{comments}</div>
    }
})

这使得数据流更加简单,避免发现错误。

相关文章

一、前言 在组件方面react和Vue一样的,核心思想玩的就是组件...
前言: 前段时间学习完react后,刚好就接到公司一个react项目...
前言: 最近收到组长通知我们项目组后面新开的项目准备统一技...
react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom...