2017-02-19 6 views
0

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; 

フェッチで観測可能フィールド(menuItems)を設定した後、jsxレンダリングメソッドが再レンダリングされませんでした。

+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

ここ順序を逆にしてみてください...これまでこの

@observer 
@inject('params') 

から...

@inject('params') 
@observer 

from documentation: @Injectと@Observerの両方を使用する場合は、それらを適用することを確認してください正しい順序:オブザーバーは内側のデコレータで、外側を注入する必要があります。その間に別のデコレータがあるかもしれません。

関連する問題