2017-06-21 13 views
0

私はReactのmobx実装を理解しようとしています。私はcreate react appを使いデコレータを使うためのデフォルト設定を更新しました。Mobxは決して更新されません

EDIT:ベン・ハレの返信(!彼のおかげで)私はこのように私のコードを更新した後:

index.js

import React from 'react'; 
import ReactDOM from 'react-dom'; 
import App from './App'; 
import MessageStore from "./store/messages"; 

ReactDOM.render(<App store={new MessageStore()} />, 
document.getElementById('root')); 

**それから私は、このような単純なストアを作成しましたApp.js **

import React from "react"; 
import { observer } from "mobx-react"; 

@observer 
export default class App extends React.Component { 

    constructor(props) { 
     super(props); 
     this.store = props.store; 
    } 

    render() { 
     return <ul> 
      { this.store.allMessages.map((msg) => { 
       return <li key={msg}>{msg}</li> 
      })} 
     </ul> 
    } 
} 

messages.js

import {action, observable, computed} from "../../node_modules/mobx/lib/mobx"; 

export default class MessageStore { 

    @observable messages = ["My first message"]; 

    constructor() { 
     setInterval(() => { 
      // Add some random messages every second 
      this.addMessage(Math.random()); 
     }, 1000); 
    } 

    @action addMessage(msg) { 
     this.messages.push(msg); 
    } 

    @computed get allMessages() { 
     return this.messages; 
    } 

} 

最初のメッセージは表示されますが、setIntervalがメッセージをストアに追加するとコンポーネントが更新されません。手伝って頂けますか ?私にとって

+1

シンプルなコンポーネントをどのようにレンダリングしていますか? mobxでは、@ observerを動作させるためにストアを小道具として渡す必要があります。レンダリングの内部ではアクセスできません。それは変化の再燃を引き起こさないでしょう。 –

+0

返信ありがとうございます@BenHare私は私の質問を編集しました –

答えて

0

作品:

https://codesandbox.io/s/LgQXNBnNW

あなたは、ブラウザのログまたは端末にエラーを見ましたか?

+0

あなたの答えと私のコードをテストする時間がありがとう!実際には動作しているので、あなたのコードと私の違いを調べました。私のエラーはこれでした: 私は私のIDEに夢中になりました!私は次のように置き換えました。 "../../node_modules/mobx/lib/mobx"からimport {action、observable、computed} by "mobx"からのimport {action、observable、calculated}; "それは正常に動作します –

関連する問題