回流商店不听行动

Posted

技术标签:

【中文标题】回流商店不听行动【英文标题】:Reflux stores not listening to actions 【发布时间】:2015-01-08 08:28:12 【问题描述】:

编辑:

我现在觉得很傻。 问题是我的代码中的任何地方都不需要我的商店,所以它实际上从未被创建。

当我调用它正在侦听的操作时,我的回流 js 商店没有调用它的回调。以下是相关代码:

操作:

module.exports = require("reflux").createActions([
    "createUser"
]);

商店:

var userActions = require("../actions/user-actions");

module.exports = require("reflux").createStore(
    listenables: userActions,

    onCreateUser: function() 
        console.log("onCreateUser called", arguments);
    
);

触发动作的组件:

var React = require("react"),
    userActions = require("../../actions/user-actions");

var Login = React.createClass(
    getInitialState: function() 
        return 
            name: ""
        ;
    ,

    updateName: function(event) 
        this.setState(
            name: event.target.value
        );
    ,

    // Action gets called here
    submit: function(event) 
        event.preventDefault();
        console.log("Creating user", this.state.name);
        userActions.createUser(this.state.name);
    ,

    render: function() 
        var name = this.state.name;

        return (
            <div className='login'>
                <form onSubmit=this.submit>
                    <input value=name onChange=this.updateName />
                    <button>Create</button>
                </form>
            </div>
        );
    
);

当我在Login 组件中提交表单时,submit 方法被调用而不会引发任何错误,但我的商店的onCreateUser 方法永远不会被调用。

回流 github 页面上的示例看起来相当简单,这与在商店中使用 listenables 属性的示例几乎完全相同。

任何帮助将不胜感激。

【问题讨论】:

感谢您的编辑……您可以把它加粗吗?我觉得和你一样傻,但如果我阅读编辑部分作为解决方案,我会更早发现问题。 :) @mknecht 我已将编辑加粗并将其移至顶部 【参考方案1】:

由于商店通常与组件挂钩,并且以这种方式需要,因此您可以创建一个仅注销到控制台的测试组件:

var store = require('path/to/your/store'),
    React = require('react'),
    Reflux = require('reflux');

var ConsoleLogComponent = React.createClass(
    mixins: [ 
        Reflux.listenTo(store, "log")
        // you may add more stores here that calls the log method
    ],
    log: function() 
        console.log(arguments);
    ,
    render: function() 
        return <div />
    
);

然后,您可以将这个控制台组件放在任何地方,并检查商店是否正常工作。

【讨论】:

以上是关于回流商店不听行动的主要内容,如果未能解决你的问题,请参考以下文章

在“回流”中,行动的目的是啥?

iOS安卓应用商店调整:抽成太高开发者愤怒

如何使用react-leaflet添加或删除图层

将参数传递给 withLatestFrom 函数

在行动中反应 Dispatcher.dispatch,而不是将有效负载分派到存储

“天天快报”涉黄突然被下架?官方回应