0

更新原来我的整个方法是错误的。正如公认的答案所暗示的,一个好的起点是使用 React + Flux 构建并托管在 GitHub 上的TodoMVC应用程序。


我正在构建一个非常小的 React + Flux 应用程序用于学习目的。目前它只包含登录表单和内容(实际上只是显示用户名)。我计划将应用程序组件作为我的应用程序中唯一的有状态组件,它将其状态作为道具发送给孩子。但是我不知道从孩子(在我的例子中是输入表单)更新应用程序状态的最佳实践是什么。我想我可能可以沿着层次结构将它冒泡,但这似乎是一种不好的做法。另外,我应该将登录的用户名保存在商店中吗?

这是我的意思的一个基本示例:

var LoginForm = React.createClass({
    _onSubmit : function(e) {
        e.preventDefault();

        var username = this.refs.username.getDOMNode().value.trim();

        if(!username) return;

        alert(username);

        this.refs.username.getDOMNode().value = "";

        return
    },

    render : function() {
        return (
            <div>
                <form onSubmit={this._onSubmit}>
                    <input
                        type="text"
                        placeholder="Insert username"
                        ref="username"
                    />
                    <button type="submit">Login</button>
                </form>
            </div>
        );
    }
});

var Header = React.createClass({
    render : function() {
        return (
            <div className="header">
                <LoginForm />
            </div>
        );
    }
});

var Content = React.createClass({
    render : function() {
        return (
            <div className="content">Welcome, [username]</div>
        );
    }
});

var MyApp = React.createClass({
    render : function() {
        return (
            <div>
                <Header />
                <Content />
            </div>
        );
    }
});

React.renderComponent(
    <MyApp />,
    document.body
);

我在这里用这个例子设置了一个 JSFiddle,我的目标是用警报字符串替换 [username]。

4

1 回答 1

0

对不起,但我还没有在您的代码中看到任何通量的架构 :) 对于高级实现解释,假设您具有通量的所有 3 个基本结构,即actiondispatcherstore

_onSubmitinLoginForm组件中,您应该触发action执行登录,然后事件将通过dispatcher并传递给store.

从 开始store,它将执行登录(并在此处保存[username]信息),然后触发事件(例如change)。该事件将ContentcomponentDidMount. 听完change事件后,您应该能够username从商店获取信息。这是通量的一个很好的例子

于 2015-01-04T03:00:53.003 回答