Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mobx装饰师不';不能使用Typescript_Typescript_Decorator_Mobx_Mobx React - Fatal编程技术网

mobx装饰师不';不能使用Typescript

mobx装饰师不';不能使用Typescript,typescript,decorator,mobx,mobx-react,Typescript,Decorator,Mobx,Mobx React,我刚刚开始开发一个新项目,在其中我使用mobx作为react web应用程序和react原生移动应用程序之间的共享状态管理核心模块 核心模块使用typescript,由两个应用程序项目编译和使用 我的问题是,当存储区(来自核心模块)中的@observable属性发生更改时,这两个项目中的组件都不会重新呈现 当我在每个项目中创建具有相同定义和逻辑的存储时,组件会按预期重新渲染。我还将核心模块的一部分转换为使用babel cli传输的javascript ES6,它也可以按预期工作 我相信这个问题与

我刚刚开始开发一个新项目,在其中我使用mobx作为react web应用程序和react原生移动应用程序之间的共享状态管理核心模块

核心模块使用typescript,由两个应用程序项目编译和使用

我的问题是,当存储区(来自核心模块)中的
@observable
属性发生更改时,这两个项目中的组件都不会重新呈现

当我在每个项目中创建具有相同定义和逻辑的存储时,组件会按预期重新渲染。我还将核心模块的一部分转换为使用babel cli传输的javascript ES6,它也可以按预期工作

我相信这个问题与将从Typescript编译的存储导入到非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
版本

react和react原生项目都使用常规巴别塔

使用存储的组件(我已配置了
提供程序
):

@inject('userStore')
@观察者
类加载扩展了组件{
组件willmount(){
this.props.userStore.login();
}
render(){
返回(
this.props.userStore.loading?loading…:loaded。。。
) }}

您可以尝试使用
mobx.useStrict
来确保在将可观察值设置为新值时不会将其重新写入简单值。这里也有同样的问题。你解决了吗?@BrickYang在本期中看到了对我有效的解决方案:你可以尝试使用
mobx.useStrict
,以确保在将可观察值设置为新值时不会将其重新写入简单值。这里也有同样的问题。你解决了吗?@BrickYang在这个问题上看到了对我有效的解决方案:
@inject('userStore')
@observer
class Loading extends Component {

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

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