gpt4 book ai didi

meteor - 用户更新时包含在 currentUser 中的内容重新渲染

转载 作者:行者123 更新时间:2023-12-04 17:51:59 24 4
gpt4 key购买 nike

我正在使用 Meteor 并且遇到了一个问题,即我的内容在我不想要的时候被重新渲染。

我的主要内容包含在 currentUser 中我觉得 if 语句是相当标准的。

{{#if currentUser}}
{{> content}}
{{/if}}

这个问题是当我更新我的用户对象时我的内容模板被重新渲染。有没有办法解决?我不会在内容模板中的任何地方引用用户。

谢谢!

这是一个复制我的问题的示例应用程序:

HTML

<head>
<title>Render Test</title>
</head>

<body>
{{loginButtons}}

{{> userUpdate}}

{{#if currentUser}}
{{> content}}
{{/if}}
</body>

<template name="userUpdate">
<p>
<input id="updateUser" type="button" value="Update User Value" />
User last update: <span id="lastUpdated">{{lastUpdated}}</span>
</p>
</template>

<template name="content">
<p>Render count: <span id="renderCount"></span></p>
</template>

JavaScript

if (Meteor.isClient) {
Meteor.startup(function() {
Session.set("contentRenderedCount", 0);
});

Template.content.rendered = function() {
var renderCount = Session.get("contentRenderedCount") + 1;
Session.set("contentRenderedCount", renderCount);
document.getElementById("renderCount").innerText = renderCount;
};

Template.userUpdate.events = {
"click #updateUser": function() {
Meteor.users.update({_id: Meteor.userId()}, {$set: {lastActive: new Date()}});
}
};

Template.userUpdate.lastUpdated = function() {
return Meteor.user().lastActive;
};

}

if (Meteor.isServer) {
Meteor.users.allow({
'update': function () {
return true;
}
});
}

更新:
我应该稍微解释一下这个例子。创建用户后,单击“更新用户值”按钮会导致渲染计数增加。这是因为它包含在 {{#if currentUser}} 中。 .如果将其删除,您会注意到渲染计数仍为 1。

此外,您需要添加 accounts-uiaccounts-password打包到您的项目中。

最佳答案

Meteor 将重新渲染任何包含被改变的 react 变量的模板。在你的情况下 {{currentUser}}Meteor.user()这是一个包含用户数据的对象。当您更新用户配置文件时,对象会发生变化,它会告诉 meteor 重新计算涉及该对象的所有反应。

我们可以稍微改变一下 react 性,让它只对用户是否登录/退出的变化使用react,而不是对象本身的任何变化:

Meteor.autorun(function() {
Session.set("meteor_loggedin",!!Meteor.user());
});

Handlebars.registerHelper('session',function(input){
return Session.get(input);
});

你的 html
{{#if session "meteor_loggedin"}}
{{> content}}
{{/if}}

关于meteor - 用户更新时包含在 currentUser 中的内容重新渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14783809/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com