我正在尝试使用此代码使 Meteor 助手无 react :

let titleNonReactive;

Template.articleSubmission.onCreated(function () {

    this.autorun(function() {
        titleNonReactive =  Template.currentData().title;
    });

});

Template.articleSubmission.helpers({
    titleNonreactive: function() {
        return titleNonReactive;
    }
});

然而,由此产生的输出仍然是 react 性的。如果我在后台保存一个新值,它会在前端自动更新,我用 {{ titleNonreactive }} 显示这个助手的结果。

我怎样才能解决这个问题?

最佳答案

这可能是由您的 Blaze 数据上下文引起的(需要查看您的模板代码进行确认),但这里有一个可能的解决方案,不涉及使用 Tracker.nonreactive 。由于您希望 titleNonreactive 的值不是响应式的,您可以只使用标准的本地/非响应式变量来存储原始响应式标题的副本。例如:

import { Template } from 'meteor/templating';
import { articles } from '/imports/api/articles/collection';
import './main.html';

let originalTitle;

Template.body.onCreated(function onCreated() {
  this.autorun(() => {
    const article = articles.findOne();
    if (article && !originalTitle) {
      originalTitle = article.title;
    }
  });
});

Template.body.helpers({
  article() {
    return articles.findOne();
  },

  titleNonreactive() {
    return originalTitle;
  }
});

然后在您的模板中:
<ul>
  {{#with article}}
    <li>Reactive Title: {{title}}</li>
    <li>Non-Reactive Title: {{titleNonreactive}}</li>
  {{/with}}
</ul>

关于Meteor - Tracker.nonreactive() 没有从助手中移除 react 性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38748611/

10-13 07:40