2
私はasMap
をしようとして出力するcoverType
に一致する書籍のタイトルたいのです:MobX - asMapを計算値からフィルタリングしますか?
をここではBookStore
次のとおりです。ここで
class BookStore {
@observable coverType = 'soft';
@observable booksByIdMap = asMap({
"88cd7621": {
"id": "88cd7621",
"title": "The Secret",
"coverType": 'soft'
},
"88cd7622": {
"id": "88cd7622",
"title": "The Alchemist",
"coverType": 'hard'
},
"88cd7623": {
"id": "88cd7623",
"title": "Javascript",
"coverType": 'soft'
}
});
@computed get byCoverType() {
return this.booksByIdMap.filter(book => book.coverType == this.coverType);
}
}
はUIです:
const bookStore = new BookStore();
const BookViewItem = observer(({book}) =>
<li>
{book.title}
</li>
);
@observer
class BookView extends Component {
render() {
return <div>
<h1>Books With Cover Type: {bookStore.coverType}</h1>
<ul>
{bookStore.byCoverType().map(book =>
<BookViewItem book={book} key={book.id} />
)}
</ul>
</div>
}
}
しかし、それはしていません現在のcoverType
値に基づいて書籍のタイトルを表示します。 https://jsfiddle.net/ob7v1gk5/
どのように出力本のタイトルが計算Bookstore.byCoverType
フィルタリングされた結果を使用してすることができます:ここで
はフィドルのですか?
が、これがうまく静かに動作しますが、私はbookIdsArray' '経由でフィルタリング苦労しています、あなたに@Tholleをありがとうございます。 http://jsbin.com/pasufinufe/1/edit?js,outputには、「bookIdsArray」が渡されていますが、何も表示されません。私は元のマップをブックIDの配列でフィルタリングする方法がわからないので、計算された 'byBookId'のマップからそれらを戻します。 – Wonka
@Wonkaよろしくお願いします。それはあなたの質問の一部でもありませんでした。 – Tholle
あなたは正しいですが、申し訳ありませんが、私はちょうど私がidsで地図をフィルタリングする方法を理解したことを確かめたいと思っていました。(訳注:同様に計算される。それをクリアするための@ Tholleありがとう:) – Wonka