如何检查对象是否在Mobx可观察数组中?

时间:2017-04-19 03:53:43

标签: reactjs mobx mobx-react

我在React组件中使用let num: Right = 55;来根据对象是否在mobx可观察数组中来设置按钮的样式。

按钮用于收藏。它将该特定列表项的对象推送到名为“favorites”的商店中的可观察数组中。收藏夹是一个可观察的对象数组。

以下是我的按钮中的ES6模板文字:

indexOf

基本上,检查对象是否在数组中,className为className={`btn-group ${((this.props.store.favorites.indexOf(this.props.data) > -1)) ? 'success' : 'info'}`} ,如果为false success

当收藏夹数组处于本地状态时,此功能完全正常。但是我发现收藏夹数组中的对象在可观察数组中看起来有所不同。我知道可观察数组的收藏夹与本地数组收藏夹不同。

但是如何测试对象是否在可观察的对象数组中呢?我尝试了infoslice()并使用了findIndex但没有骰子。

2 个答案:

答案 0 :(得分:4)

关于doc: isObservableArray

  

如果给定对象是使用mobx.observable(array)可观察的数组,则返回true。

所以要知道data是否在可观察的favorites数组中:

// If data is a primitive
className={`btn-group ${mobx.isObservableArray(this.props.store.favorites) && this.props.store.favorites.indexOf(this.props.data) > -1 ? 'success' : 'info'}`}

// Id data is an object it is a little more verbose and coupled to your data
// structure. You have to use the `find` function to iterate and test if an 
// element in the array has the same id.
className={`btn-group ${mobx.isObservableArray(this.props.store.favorites) && !!this.props.store.favorites.find(fav => fav.id === this.props.data.id) ? 'success' : 'info'}`}

这是一个带有函数助手的POC:https://jsbin.com/botijom/edit?js,console

答案 1 :(得分:3)

Michel(mobx创建者)通过Gitter channel向我提供了我需要的提示。

我实际上需要一个浅的可观察数组,而不是一个深度可观察的数组。我不需要数组中对象的每个属性都是可观察的(因此所有的集合/得到我之前看到的对象属性),只是添加或删除对象。

所以我从

改变了它
@observable favorites = []

 @observable favorites = observable.shallowArray();

最终,如果您需要使用深度可观察的数组,@ dagatsoin的答案是正确的。

相关问题