Метод рендеринга не запускается при обновлении наблюдаемого массива

Загрузка данных с помощью метода выборки в классе Repo в порядке, но я не смог передать этот компонент, на самом деле я ожидаю, что он повторно отобразит компонент наблюдателя, но этого не происходит. Они здесь;

MenuComponent.tsx:

@observer
@inject('params')
class MenuComponent extends React.Component<{params?:IMenuModel[]}, {}> {
  render() {
    //params undefined.
    var menuJSX : JSX.Element[] = this.props.params ? this.props.params.map((item:IMenuModel, i:number)=>{
      return (<li key={item.Id}>{item.itemName}</li>)
    }):[];
    return render(){...}

MenuRepo.tsx:

class MenuRepo {
  @observable menuItems?: IMenuModel[];
  constructor() {
    this.getItems();
  }
  @action getItems(): void {
    fetch(`..`).then((response: Response): Promise<{ value: IMenuModel[] }> => {
        this.menuItems = [
          { Id: 1, itemName: 'test-item1', childItems: [] }
        ];//property setted here..
    })
      }
  }
export default new MenuRepo;

App.tsx;

import Menu from './components/MenuComponent';
import menuCodes from './components/MenuRepo';
class App extends React.Component<null, null> {   
  render() {
    return (
      <div className="App">
        <Menu params = {menuCodes.menuItems}/>
      </div>
    );
  }
}
export default App;

Я проверил порядок выполнения, метод рендеринга jsx не перерисовывается после установки наблюдаемого поля (элементы меню) в выборке.


person TyForHelpDude    schedule 19.02.2017    source источник
comment
как ты проходишь мимо магазина? Вам нужно использовать Provider, чтобы передать магазин. См. пример stackoverflow.com /вопросы/42268727/   -  person Hosar    schedule 19.02.2017
comment
@Hosar ‹Параметры меню = {menuCodes.menuItems}/› разве это не пропуск в магазин? Я видел учебник, они проходят его таким образом   -  person TyForHelpDude    schedule 19.02.2017
comment
Вы имеете в виду, что мне нужно использовать import {Provider} из 'mobx-react'; ? но многие образцы не используют его?   -  person TyForHelpDude    schedule 19.02.2017


Ответы (1)


попробуйте изменить порядок здесь... из этого

@observer
@inject('params')

к этому...

@inject('params')
@observer

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

person Aaron Saunders    schedule 20.02.2017