2017-02-19 6 views
0

Repo 클래스에서 fetch 메소드로 데이터를로드하는 데는 문제가 있지만 구성 요소를 전달할 수는 없습니다. 실제로 관찰자 구성 요소를 다시 렌더링하지만 실제로는 실행되지 않습니다. 여기 있습니다;관찰 가능한 배열 업데이트로 렌더 메소드가 트리거되지 않음 렌더 메소드가 트리거되지 않음

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 방법에 반입되지 observerable 필드 (메뉴 아이템)을 설정 한 후 다시 렌더링 렌더링 실행 순서를 조사했다. 여기 순서를 반대로 ...이이

@observer 
@inject('params') 

에서

+0

어떻게 가게를 지나가나요? 요점을 전달하려면 ** 공급자 **를 사용해야합니다. 예제보기 http://stackoverflow.com/questions/42268727/react-getting-observable-values-in-component/42275527#42275527 – Hosar

+0

@Hosar "

"이 패스가 아닙니다. 가게? 내가이 튜토리얼을 보았습니다. – TyForHelpDude

+0

"mobx-react '에서"import {provider} "를 사용해야 함을 의미합니까" ? 그러나 많은 샘플은 그것을 사용하지 않습니까? – TyForHelpDude

답변

0

시도 ...

from documentation:

@inject('params') 
@observer 
모두 @Inject와 @observer을 사용하여에 적용해야합니다 올바른 순서 : 관찰자는 내부 장식 자이어야하고 외부를 주입해야합니다. 그 사이에 추가 데코레이터가있을 수 있습니다.