为什么地图在 Meteor Tracker.autorun 下不起作用?
Why map does not work under Tracker.autorun of Meteor?
最近我发现如果我在 Meteor 的 Tracker.autorun 函数中将 map 函数应用于我的数组它不起作用,我一直想知道为什么?我尝试制作静态数组,即使它不起作用。
renderMyBooks() {
Tracker.autorun(() => {
Meteor.subscribe("ziglerNata")
console.log(Meteor.userId());
const myBooks = BooksInfo.find({ userId: Meteor.userId() }).fetch();
//const myBooks = [1,2,3,4,5];
console.log(myBooks);
return (myBooks.map(book => {
return (
<div key={book._id} className="book-info">
<div className="book-info-content">
<div className="book-info-content-t-a">
<h3>{book.title} </h3>
<h5>{book.author}</h5>
</div>
</div>
</div>
)
})
)
})
}
我建议采用不同的方法。这可能不会直接回答您为什么 Tracker.autorun
没有按您预期的那样工作的问题,但我认为这比寻找原始问题的答案更有帮助。
我认为在 meteor 中使用响应式数据源的推荐模式是使用 useTracker
。这是您以该模式重写的代码:
import { useTracker } from 'meteor/react-meteor-data';
const MyBooks = () => {
const myBooks = useTracker(() => {
Meteor.subscribe("ziglerNata")
console.log(Meteor.userId());
return BooksInfo.find({ userId: Meteor.userId() }).fetch();
}, []);
console.log(myBooks);
return (myBooks.map(book =>
<div key={book._id} className="book-info">
<div className="book-info-content">
<div className="book-info-content-t-a">
<h3>{book.title} </h3>
<h5>{book.author}</h5>
</div>
</div>
</div>
));
}
最近我发现如果我在 Meteor 的 Tracker.autorun 函数中将 map 函数应用于我的数组它不起作用,我一直想知道为什么?我尝试制作静态数组,即使它不起作用。
renderMyBooks() {
Tracker.autorun(() => {
Meteor.subscribe("ziglerNata")
console.log(Meteor.userId());
const myBooks = BooksInfo.find({ userId: Meteor.userId() }).fetch();
//const myBooks = [1,2,3,4,5];
console.log(myBooks);
return (myBooks.map(book => {
return (
<div key={book._id} className="book-info">
<div className="book-info-content">
<div className="book-info-content-t-a">
<h3>{book.title} </h3>
<h5>{book.author}</h5>
</div>
</div>
</div>
)
})
)
})
}
我建议采用不同的方法。这可能不会直接回答您为什么 Tracker.autorun
没有按您预期的那样工作的问题,但我认为这比寻找原始问题的答案更有帮助。
我认为在 meteor 中使用响应式数据源的推荐模式是使用 useTracker
。这是您以该模式重写的代码:
import { useTracker } from 'meteor/react-meteor-data';
const MyBooks = () => {
const myBooks = useTracker(() => {
Meteor.subscribe("ziglerNata")
console.log(Meteor.userId());
return BooksInfo.find({ userId: Meteor.userId() }).fetch();
}, []);
console.log(myBooks);
return (myBooks.map(book =>
<div key={book._id} className="book-info">
<div className="book-info-content">
<div className="book-info-content-t-a">
<h3>{book.title} </h3>
<h5>{book.author}</h5>
</div>
</div>
</div>
));
}