2017-07-04 5 views
0

では動作しません。mobxデコレータは、私はちょうど私がウェブアプリを反応させ、反応させ、ネイティブモバイルアプリ間の共有状態管理コアモジュール用mobxを使用する新しいプロジェクトを開発し始めた活字体

コアモジュールは、typescriptを使用します。これは、両方のアプリプロジェクトによってコンパイルされ、消費されます。

@observable(コアモジュールの)ストア内のプロパティが変更されたとき、私の問題は両方のプロジェクトのコンポーネントで再現されません。

プロジェクトごとに同じ定義とロジックを使用してストアを作成すると、コンポーネントは期待どおりに再レンダリングされます。また、コアモジュールの一部をjavascript ES6をbabel-cliと一緒に変換しました。また、期待通りに動作します。

私はこの問題は、非typescriptですプロジェクトに活字体からコンパイル店舗をインポートして何かを持っていると信じて、私はそれを乗り越えることができません!

追加情報:

.tsストアファイル:

import { observable, action } from 'mobx' 

export class UserStore { 
    @observable loading = false; 

    @action login() { 
     this.loading = true; 
     setTimeout(() => {this.loading = false},1000) 
    } 
} 
export const userStore = new UserStore(); 

.tsconfigファイル:

{"compilerOptions": { 
    "lib": ["es6", "dom", "es2015"], 
    "module": "commonjs", 
    "target": "es5", 
    "moduleResolution": "node", 
    "declaration": false, 
    "outDir": "lib", 
    "experimentalDecorators": true 
    }, 
    "include": ["index.ts", "src" ]} 

活字版:2.4.1

すべてのプロジェクトがmobx最新のを使用し、 mobx-reactバージョン。

反応して反応するネイティブプロジェクトでは、通常のバベルを使用します。

(Iが設定Providerを持っている。)ストアを消費するコンポーネント:

@inject('userStore') 
@observer 
class Loading extends Component { 

    componentWillMount() { 
    this.props.userStore.login(); 
    } 

    render() { 
    return (
     this.props.userStore.loading ? <div>loading...</div> : <div>loaded...</div> 
) }} 
+0

あなたが新しい値を設定するときに、単純な値に観測可能な値を再書き込みしていないことを確認するために 'mobx.useStrict'を使用することを試みることができます。ここ –

+0

同じ問題。あなたはそれを解決しましたか? https://github.com/mobxjs/mobx/issues/1071: –

+0

は、この問題で私のために働いたソリューションを参照してください@BrickYang – naomi

答えて

-2

代わりの@inject('userStore')だけimport {userStore} from "./foo/userStore"を使用しています。要するに

@observer 
class Loading extends Component { 

    componentWillMount() { 
    userStore.login(); 
    } 

    render() { 
    return (
     userStore.loading ? <div>loading...</div> : <div>loaded...</div> 
) }} 
関連する問題