javascript - MobX - 从计算值中过滤 asMap?

标签 javascript mobx

我正在尝试 asMap 并希望输出与 coverType 匹配的书名:

这是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);
    }
}

这是用户界面:

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 值呈现书名。

这是一个 fiddle : https://jsfiddle.net/ob7v1gk5/

如何使用计算的 Bookstore.byCoverType 过滤结果输出书名?

最佳答案

MobX 映射不是数组,因此它没有过滤器和其他特定于数组的方法。检查documentation to see what methods you can use .

例如,您可以使用 values 方法,然后对结果数组 like this 使用 filter :

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.values().filter(b => b.coverType === this.coverType);
  }
}

关于javascript - MobX - 从计算值中过滤 asMap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41354427/

相关文章:

javascript - Momentjs - 获取最近的周五

javascript - 鼠标悬停事件委托(delegate)

javascript - 如何在javascript中创建图像动画

javascript - mobx @observable 在旧版 Android 4.4 平板电脑上抛出错误

javascript - 使用 MobX 将输入绑定(bind)到 React Dumb 组件内的变量

mobx - 将数据数组设置为 mobx 数组显示代理对象

javascript - Reactjs 只能更改输入中的一个字母?

javascript - 查看一组对象并从其属性中删除未定义

javascript - Mootools选择器问题

javascript - Mobx 返回 ObservableObjectAdministration 而不是我的对象