为什么地图在 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>
  ));
}