使用kefirjs将数据传递给React组件

时间:2015-08-25 14:57:31

标签: javascript reactjs reactive-programming kefir.js

我是ReactJS的新手,也是#34;反应式编程"。我尝试根据this项目创建调度程序,操作和存储,但我不知道如何将数据传递给组件。

this示例中,它无法正常工作。

var data = [1, 2, 3, 4, 5];

var AppDispatcher = Kefir.emitter();

function DataActions() {
    this.getAllData = function () {
        AppDispatcher.emit({
            actionType: "GET_ALL"
        });
    };
}

var Actions = new DataActions();

var getAllDataActionsStream = AppDispatcher.filter(function (action) {
    return action.actionType === "GET_ALL";
}).map(function (action) {
    return function (data) {
        return data;
    };
});

var dataStream = Kefir.merge([getAllDataActionsStream]).scan(function (prevData, modificationFunc) {
    return modificationFunc(prevData);
}, {});

var Content = React.createClass({
    getInitialState: function() {
        this.onDataChange = this.onDataChange.bind(this);
        return {componentData: []};
    },
    componentDidMount: function() {
        dataStream.onValue(this.onDataChange);
    },
    componentWillMount: function(){
        dataStream.offValue(this.onDataChange);
        console.log(Actions.getAllData());
    },
    onDataChange(newData) {
        this.setState({componentData: newData});
    },
    render: function() {
        console.log(this.state);
        var list = this.state.componentData.map(function (item, i) {
            return (
                <li key={i}>{item}</li>
            );
        });

        return <ul>{list}</ul>;
    }
});

React.render(<Content />, document.getElementById('container'));

1 个答案:

答案 0 :(得分:1)

我认为问题在于您使用的是ES6语法(这是编写的示例...注意Readme)。您需要使用Babel之类的转换器或将method(param => console.log(param))语法转换为普通JS(即method(function(param) { console.log(param) });)。