如何仅在 React 属性更改时调用函数?

Tin*_*tin 1 meteor reactjs meteor-tracker meteor-react

我希望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);


Run Code Online (Sandbox Code Playgroud)

Jay*_*444 5

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

componentDidUpdate(prevProps) {
    if (this.props.bar !== prevProps.bar {
        // bar prop has changed
        alert("bar changed);
    }
}
Run Code Online (Sandbox Code Playgroud)