在 ReactJS 前端使用 Meteor 反应变量
Using Meteor Reactive Variables with a ReactJS Frontend
所以我一直在使用 ReactJS 作为 Meteor 的前端,除非我遗漏了什么,否则我不确定如何使用 reactive-var 来更新我的新闻提要。下面是我现在的代码:
Dashboard = React.createClass({
mixins: [ ReactMeteorData ],
getMeteorData() {
let subscription = Meteor.subscribe( 'newsFeed' );
let page = new ReactiveVar();
page.set(0);
return {
isLoading: !subscription.ready(),
news: News.find({}, {limit: 3, skip: (page.get() * 3), sort: {createdDate: 1}}).fetch(),
page: page,
totalCount: Counts.get( 'newsCounter' )
};
},
componentDidMount() {
},
newer() {
this.data.page.set(this.data.page.get() + 1);
console.log(this.data.page.get());
},
older() {
if(this.data.page.get() > 0)
this.data.page.set(this.data.page.get() - 1);
console.log(this.data.page.get());
},
render() {
if ( this.data.isLoading ) {
return <Loading />;
} else {
return (
<div>
<NewsList news={this.data.news} />
<ul className="pager">
<li className={this.data.page.get() <= 0 ? 'previous disabled' : 'previous' } onClick={this.older}><a href="#">← Older</a></li>
<li className="next" onClick={this.newer}><a href="#">Newer →</a></li>
</ul>
</div>
);
}
}
});
目前,当我点击较新的按钮时,它似乎确实增加了页面变量,但它永远不会超过 1,而较旧的按钮似乎会将其从 1 恢复为 0,但我不是 100% 确定。我不确定反应变量有什么问题,我知道它与 Blaze 的工作方式不同,这很明显,但我似乎找不到任何解释或示例来说明如何使用它们。
如果有人可以帮助我,无论是通过示例、更正,还是 link 一份体面的文档,那将是很棒的。
您需要将页面变量移至 getInitialState。
Dashboard = React.createClass({
mixins: [ ReactMeteorData ],
getInitialState() {
let page = new ReactiveVar(0);
return { page };
},
getMeteorData() {
let subscription = Meteor.subscribe( 'newsFeed' );
return {
isLoading: !subscription.ready(),
news: News.find({}, {limit: 3, skip: (page.get() * 3), sort: {createdDate: 1}}).fetch(),
totalCount: Counts.get( 'newsCounter' )
};
},
componentDidMount() {
},
newer() {
this.state.page.set(this.state.page.get() + 1);
console.log(this.state.page.get());
},
older() {
if(this.state.page.get() > 0)
this.state.page.set(this.state.page.get() - 1);
},
render() {
if ( this.data.isLoading ) {
return <Loading />;
} else {
return (
<div>
<NewsList news={this.data.news} />
<ul className="pager">
<li className={this.state.page.get() <= 0 ? 'previous disabled' : 'previous' } onClick={this.older}><a href="#">← Older</a></li>
<li className="next" onClick={this.newer}><a href="#">Newer →</a></li>
</ul>
</div>
);
}
}
});
所以我一直在使用 ReactJS 作为 Meteor 的前端,除非我遗漏了什么,否则我不确定如何使用 reactive-var 来更新我的新闻提要。下面是我现在的代码:
Dashboard = React.createClass({
mixins: [ ReactMeteorData ],
getMeteorData() {
let subscription = Meteor.subscribe( 'newsFeed' );
let page = new ReactiveVar();
page.set(0);
return {
isLoading: !subscription.ready(),
news: News.find({}, {limit: 3, skip: (page.get() * 3), sort: {createdDate: 1}}).fetch(),
page: page,
totalCount: Counts.get( 'newsCounter' )
};
},
componentDidMount() {
},
newer() {
this.data.page.set(this.data.page.get() + 1);
console.log(this.data.page.get());
},
older() {
if(this.data.page.get() > 0)
this.data.page.set(this.data.page.get() - 1);
console.log(this.data.page.get());
},
render() {
if ( this.data.isLoading ) {
return <Loading />;
} else {
return (
<div>
<NewsList news={this.data.news} />
<ul className="pager">
<li className={this.data.page.get() <= 0 ? 'previous disabled' : 'previous' } onClick={this.older}><a href="#">← Older</a></li>
<li className="next" onClick={this.newer}><a href="#">Newer →</a></li>
</ul>
</div>
);
}
}
});
目前,当我点击较新的按钮时,它似乎确实增加了页面变量,但它永远不会超过 1,而较旧的按钮似乎会将其从 1 恢复为 0,但我不是 100% 确定。我不确定反应变量有什么问题,我知道它与 Blaze 的工作方式不同,这很明显,但我似乎找不到任何解释或示例来说明如何使用它们。
如果有人可以帮助我,无论是通过示例、更正,还是 link 一份体面的文档,那将是很棒的。
您需要将页面变量移至 getInitialState。
Dashboard = React.createClass({
mixins: [ ReactMeteorData ],
getInitialState() {
let page = new ReactiveVar(0);
return { page };
},
getMeteorData() {
let subscription = Meteor.subscribe( 'newsFeed' );
return {
isLoading: !subscription.ready(),
news: News.find({}, {limit: 3, skip: (page.get() * 3), sort: {createdDate: 1}}).fetch(),
totalCount: Counts.get( 'newsCounter' )
};
},
componentDidMount() {
},
newer() {
this.state.page.set(this.state.page.get() + 1);
console.log(this.state.page.get());
},
older() {
if(this.state.page.get() > 0)
this.state.page.set(this.state.page.get() - 1);
},
render() {
if ( this.data.isLoading ) {
return <Loading />;
} else {
return (
<div>
<NewsList news={this.data.news} />
<ul className="pager">
<li className={this.state.page.get() <= 0 ? 'previous disabled' : 'previous' } onClick={this.older}><a href="#">← Older</a></li>
<li className="next" onClick={this.newer}><a href="#">Newer →</a></li>
</ul>
</div>
);
}
}
});