ReactJS,在 child 中删除 parent.state 中的项目

ReactJS, deleting an item in parent.state in a child

我实际上正在尝试使用我觉得非常有趣的 ReactJs,它为我提供了一种解决 View 问题的新方法。

但是我在尝试删除 child 组件中的项目时遇到了问题 :

我该怎么做才能让它正常工作?

这是我的代码:

MyDirective = React.createClass({
    getInitialState: function () {
        toReturn = {}
        toReturn.text = 'Hi';
        toReturn.stringList = [
            {id: 1, value: 'value 1'},
            {id: 2, value: 'value 2'},
            {id: 3, value: 'value 3'}
        ];
        return toReturn;
    },
    handleChange: function (event) {
        this.setState({text: event.target.value});
    },
    handleKeypress: function (e) {
        var code = (e.keyCode ? e.keyCode : e.which);
        if (code === 13) {
            this.setState({stringList: this.state.stringList.concat([
                {id: this.state.stringList.length + 1, value: this.state.text}
            ])})
        }
    },
    render: function () {
        return (
            <div>
                <input type="text" value={this.state.text} onChange={this.handleChange} onKeyPress={this.handleKeypress} />
                <p>
                    {this.state.text}
                </p>
                <Listing stringList={this.state.stringList} />
            </div>
            );
    }
});


Listing = React.createClass({
    handleClick: function (item) {
        // I cant modify my state there :-/
    },
    render: function () {
        return(
            <ul>
                {
                    this.props.stringList.map(function (item) {
                        return(
                            <li key={item.id}>{item.value}                    ->
                                <button onClick={this.handleClick}>Delete</button>
                            </li>
                            );
                    }.bind(this))
                    }

            </ul>
            );
    }
});

React.render(
    <MyDirective text=""/>,
    document.getElementById('container')
);

你可以看看回流及其商店。 这背后的想法是将您的数据存储在不同的地方,您可以从需要进行相关更改的任何视图访问它。

在这种情况下,您的父组件将 "listen" 更改商店(使用 eventEmitter)并在商店发生更改时更新其状态。

希望对您有所帮助。