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

vmdwslir  于 2024-01-07  发布在  React
关注(0)|答案(2)|浏览(134)

我希望在每次Meteor订阅(在React with withTracker中跟踪)更改时显示一个模态对话框(例如alert())。
我试过使用Tracker.autorun来跟踪更改,但无法确定在代码中放置它的位置。它似乎在Component构造函数中不起作用,如果放置在render()中,每次都会运行。
这是我的代码的大纲:

  1. class Foo extends Component {
  2. render() {
  3. return (
  4. <h1>Example Header</h1>
  5. { this.maybeShowAlert() }
  6. );
  7. }
  8. maybeShowAlert() {
  9. // ONLY if bar has been updated
  10. alert('bar has changed');
  11. }
  12. }
  13. export default withTracker(() => {
  14. Meteor.subscribe('bar')
  15. return {
  16. bar: Bar.findOne({})
  17. };
  18. })(Foo);

字符串

u59ebvdq

u59ebvdq1#

以前没有使用过Meteor,但是如果你想做一些事情来响应状态/属性的变化,那么componentDidUpdate()就是它的生命周期方法。

  1. componentDidUpdate(prevProps) {
  2. if (this.props.bar !== prevProps.bar) {
  3. // bar prop has changed
  4. alert("bar changed");
  5. }
  6. }

字符串

cuxqih21

cuxqih212#

如果你要使用Tracker.autorun,那么调用它的最佳位置是componentDidMount,因为它只在组件被挂载后调用一次。你只需要调用一次tracker函数,因为每当它所依赖的React数据源发生变化时,tracker函数都会进行响应。在tracker函数中,你将根据bar像这样,

  1. componentDidMount() {
  2. Tracker.autorun(() => {
  3. let bar = this.props.bar;
  4. if (bar) {
  5. this.maybeShowAlert();
  6. }
  7. }
  8. }

字符串

相关问题