gpt4 book ai didi

javascript - 订阅准备就绪后,Meteor React 渲染两次

转载 作者:行者123 更新时间:2023-11-29 21:42:42 24 4
gpt4 key购买 nike

我将 Meteor 与 React 和 FlowRouter 结合使用来处理订阅。我发现当我的组件呈现时,它会在几秒钟后呈现两次,但只有当我将 meteor 混合订阅到订阅时才会呈现。

例如:

logged this.data

PeoplePage = React.createClass({
displayName:"People",
mixins: [ReactMeteorData],
getMeteorData() {
const subHandles = [
Meteor.subscribe("allPeople"),
];

const subsReady = _.all(subHandles, function (handle) {
return handle.ready();
});

return {
subsReady: subsReady,
people: People.find({}).fetch(),
};
},
render(){
if(this.data.subsReady == false){
return (<Loading/>);
} else {
console.log(this.data);

........

}

相同的信息显示两次。这是因为 FlowRouter 使用了快速渲染,还是我做错了什么?

最佳答案

嗯,我想问题是你每次都在触发订阅,当组件重新渲染时..我没试过,但你可以看看这是否能解决问题

getMeteorData() {
const subsReady = _.all(this.subs || [{}], function (handle) {
if (typeof handle.ready == 'function')
return handle.ready();

return false;
});

if (!subsReady) // you can extend it, to provide params to subscriptions
this.subs = [
Meteor.subscribe("allPeople")
];

return {
subsReady: subsReady,
people: People.find({}).fetch(),
}
}

如果他们已经准备好,它不应该触发潜艇。

请注意,不能将空数组传递给 _.all,因为:

_.all([], function(a) {return a.b()}) // true

这就是我向数组中添加一个空对象的原因,这样您就可以检查准备好的成员..

关于javascript - 订阅准备就绪后,Meteor React 渲染两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32207797/

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