1

alert()我希望每次在 React 中跟踪的 Meteor 订阅发生变化时显示一个模式对话框(例如一个) withTracker

我曾尝试使用Tracker.autorun来跟踪更改,但无法确定在代码中放置它的位置。它似乎在Component构造函数中不起作用,并且如果放置在render().

这是我的代码的概要:

class Foo extends Component {
    render() {
        return (
            <h1>Example Header</h1>
            { this.maybeShowAlert() }
        );
    }

    maybeShowAlert() {
       // ONLY if bar has been updated
       alert('bar has changed');
    }
}

export default withTracker(() => {

    Meteor.subscribe('bar')

    return {
        bar: Bar.findOne({})
    };
})(Foo);


4

2 回答 2

6

之前没有使用过 Meteor,但是如果你想对状态/属性的变化做出响应,那么componentDidUpdate()它就是生命周期方法。例如

componentDidUpdate(prevProps) {
    if (this.props.bar !== prevProps.bar {
        // bar prop has changed
        alert("bar changed);
    }
}
于 2019-02-08T04:01:54.163 回答
1

如果您要使用Tracker.autorun,那么最好的调用位置是 in componentDidMount,因为它只在组件安装后调用一次。您只需调用一次跟踪器函数,因为跟踪器函数将在它所依赖的响应式数据源发生变化时重新运行。在跟踪器功能中,您将maybeShowAlert根据bar类似的值进行调用,

componentDidMount() {
    Tracker.autorun(() => {
        let bar = this.props.bar;
        if (bar) {
            this.maybeShowAlert();
        }
    }
}
于 2019-02-08T06:49:43.870 回答