如何根据 react.js 组件中的道具更改回流 listenTo mixin

How can I change the reflux listenTo mixin based on a prop in a react.js component

任何人都可以帮忙...

我有这个列表组件,我希望能够切换不同的数据存储(在 props 中定义)

mixins:[Reflux.listenTo(RecentPupilsStore, 'onChange')],

但我想这样做 -

mixins:[Reflux.listenTo(this.props.store, 'onChange')],

但是 props 在 mixin 中似乎不可用。我也试着把它转移到一个函数中:

mixins:[Reflux.listenTo(this.setStore(this.props.store), 'onChange')],
setStore: function(store){
    if(store == 'RecentPupilsStore') { return RecentPupilsStore; }
},

感谢任何帮助。非常新的 ot 反应,但试图使其尽可能可重用!

EG:我想包含这样的组件:

<FilterList data="pupils" />
<FilterList data="groups" />

等 - 这些会查看这些商店。

我会继续使用 mixin,只听两个商店并相应地映射您的数据。

componentDidMount = () => {
    // console.log('AppCtrl componentDidMount');
    this.unsubscribeApp = AppStore.listen(this.appStoreDidChange);
    this.unsubscribeGS = GenusSpeciesStore.listen(this.gsStoreDidChange);
};
componentWillUnmount = () => {
    this.unsubscribeApp();
    this.unsubscribeGS();
};
appStoreDidChange = () => {
    this.setState(getAppState());
};
gsStoreDidChange = () => {
    this.setState(getGsState());
};

我不会说这是最好的解决方案,但它回答了您关于如何使用 props 定义要收听的商店名称的问题。

您不需要定义应用 Mixin 的存储和方法。您可以使用更通用的 'Reflux.ListenerMixin' 并将其与 'ComponentDidMount'.

中的侦听器注册相结合
var MyComponent = React.createClass({
    mixins: [Reflux.ListenerMixin],
    // Lifecycle events
    componentDidMount: function() {
        var theStore = defineTheStore(this.props.data);
        this.listenTo(theStore, this.onChange);
    },
    render: function() {
        return(
            <div >
                ....
            </div>
        );
    },
    onChange: function() {

    }
});