0

最近、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>
                    )
                })
            )
        })
    }
4

1 に答える 1

1

別のアプローチをお勧めします。これは、期待どおりに機能しない理由に関する質問に直接答えない場合がありTracker.autorunますが、元の質問に対する答えを探すよりも役立つと思います。

React で 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>
  ));
}
于 2021-02-21T17:16:16.743 に答える