получить свойство массива, принадлежащее наблюдаемому массиву в mobx - PullRequest
0 голосов
/ 01 мая 2019

У меня есть наблюдаемый массив mobx, называемый маршрутами. Routes имеет свойство под названием views, которое также является массивом. Я могу успешно извлечь нужный элемент из маршрутов, используя array.filter, но когда я пытаюсь вернуть представления этого маршрута, используя array.map, он возвращает undefined. В данном конкретном случае, когда я нахожу нужный элемент с помощью array.filter, я хочу вернуть массив представлений этого элемента, а не сам элемент

Вот мой наблюдаемый массив внутри класса

class routeStore {
  routes =  [
    {
      collapse: true,
      name: "Library",
      nameSys: "library",
      id: shortid.generate(),
      icon: "book",
      views:[
            {
              path: ["/library/tsearch"],
              name: "Title Search",
              id:shortid.generate(),
              mini: "S",
              component: LibraryHome
            },
            {
              path: ["/library/asearch"],
              name: "Author Search",
              id:shortid.generate(),
              mini: "S",
              component: LibraryHome
            }
          ]
     }
   ]

 get returnPartialArray() {
    return this.routes
      .filter( route => route.nameSys === "library")
      .map( item => item.views )
  }
}
decorate(routeStore, {
  routes: observable,
  returnPartialArray: computed,
})

В моем коде, который вызывает частичный массив, у меня есть это:

  <NestedCollapsibleList 
    routes={store.RouteStore.returnPartialArray} 
    classes={classes} 
    location={this.props.location} 
    miniActive={ this.props.miniActive}
  />

и возвращает ноль или пусто.

Если я пытаюсь получить доступ к свойству views, например, «store.RouteStore.returnPartialArray.views», возвращается ошибка. Невозможно прочитать свойство 'map' из неопределенного

Если я изменю returnPartialArray, чтобы он был таким

get returnPartialArray() {
    return this.routes
      .filter( route => route.nameSys === "library")
  }

возвращает элемент верхнего уровня, где nameSys === "библиотека". Но дело в том, что мне не нужен элемент верхнего уровня, мне нужно только его свойство views.

Моя цель здесь заключается в том, чтобы хотя весь маршрутный массив использовался для создания маршрутов, я хочу использовать только библиотечные маршруты, из которых можно создать систему меню (конечно, в магазине есть много других маршрутов).

Я ожидал что-то вроде следующего, что было сделано в приглашении Node (данные только для этого примера):

> let arr = [{name:"bob",views:[{part:"robber"}]}]
undefined
> arr
[ { name: 'bob', views: [ [Object] ] } ]
> arr.filter(item=>item.name === "bob")
[ { name: 'bob', views: [ [Object] ] } ]
> arr.filter(item=>item.name === "bob").map(route => route.views)
[ [ { part: 'robber' } ] ]

arr.filter (). Map () должен возвращать подмассив. Существует принцип mobx, который я не понимаю при работе с наблюдаемыми массивами. Итак, мой вопрос, как мне получить только вложенный массив "views" из вычисляемой функции returnPartialArray?

...