我刚刚开始开发一个新项目,在这个项目中,我使用mobx作为反应式Web应用程序和反应原生移动应用程序之间的共享状态管理核心模块。
核心模块使用typescript,它由两个应用程序项目编译和使用。
我的问题是,当商店中的@observable
属性(来自核心模块)发生变化时,两个项目中的组件都不会重新呈现。
当我在每个项目中创建具有相同定义和逻辑的商店时,组件会按预期重新呈现。我也将核心模块的一部分转换为用babel-cli编译的javascript ES6,它也按预期工作。
我认为这个问题与将从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
版本。
反应和反应原生项目都使用普通的巴贝尔。
使用商店的组件(我已经配置了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 :(得分:-3)
而不是@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>
) }}