2017-02-09 11 views
2

これはしばらくの間遊んでいて、それが不可能なのか、ES6、React、MobXの基本的なものが欠けているのか分かりません。mobx-react観測可能なストアを作成する

私は以下のように別のファイルにmobxストアを持っています。

import { observable, action } from 'mobx'; 

export default class Store { 

@observable data = []; 

@action getAll(){ 
    this.data = [{ 
    itemTitle: 'Item One' 
    },{ 
    itemTitle: 'Item Two' 
    }] 
    return this.data 
} 

@action pushItem(item){ 
    this.data.push(item) 
} 

addAfter5Secs(){ 
    setTimeout(() => { 
    console.log('Item Added') 
    this.pushItem({ 
    itemTitle: 'Item Two' 
    })}, 5000) 
} 

constructor() { 
    console.log('Store Created') 
    this.getAll(); 
    this.addAfter5Secs() 
} 
} 

次に、私はそれをビューにインポートし、その時点でそのストアのインスタンスを作成します。

import React from "react"; 
import { List, Button } from 'semantic-ui-react'; 
import { observer, inject } from 'mobx-react'; 
import Store from '../Data/Store'; 
import DevTools from 'mobx-react-devtools'; 

const dataItems = new Store 

@observer 
export default class ScriptsHome extends React.Component { 
    render() { 
    const items = observer(dataItems) 
    return (
     <List> 
     {items.data.map((reg, key) => { 
      return(
      <List.Item key={key}> 
        <Button content={reg.itemTitle}/> 
       </List.Item>) 
      })} 
      <DevTools /> 
     </List> 
    ); 
    } 
} 

ルートコンポーネントからプロバイダーに渡したり、エクスポートで「new」キーワードを使用してインスタンスを作成したりすることは望ましくありません。私は実際に数十の店舗を持っているので、私はそれらをビューによって必要に応じて作成したいだけです。

上記のコードは最初の2つのアイテムをレンダリングし、3番目のアイテムは5秒後にのみストアに追加されますが、コンポーネントが自動的にレンダリングされないためアイテムは表示されません。私はレンダー機能を強制的に起動すると、それが表示されます。

私はこのビューを呼び出すためにルータを使用していますので多分それも問題ですか?

私はちょうどMobx​​、反応などを学んでいるので、どんな助けもありがとうございます。すべての例はちょうど1つか2つの店を使用するようである。

答えて

0

これで少し時間を費やしてから、MobXではまったく問題ではないことが判明しました。 反応して反応するルータのバージョンが問題と思われました。 反応ルータのDOMを使用すると問題ありません。

関連する問題