标签: mobx

React / MobX:存储值未定义?

我的 MobX 自动运行函数会注销undefined此处的两个值。另外,在我的组件中import user from '../../stores/UserStore,我使用的实例{user.userName}都没有显示任何内容。

import { observable, autorun } from 'mobx'

class UserStore {
  @observable userName = "tommy";
  @observable arr = [0,1]
}

const user = window.user = new UserStore

export default user;


// user.userName = "timmy"; // works, but not observable.

autorun(() => {
  console.log(user.userName) // undefined
  console.log(user.arr) // undefined
})
Run Code Online (Sandbox Code Playgroud)

javascript reactjs mobx

4
推荐指数
1
解决办法
6011
查看次数

如何在 React Native 中使用异步数据(AsyncStorage)初始化 MobX 存储

我们创建了一个简单的 MobX 存储来保存对象。每次 fooObject 更改时,此 MobX 存储也会与 AsyncStorage 同步:

import { observable } from 'mobx';

class FooStore {
  @observable fooObject = {};

  setFooObject(newFooObject) {
    this.fooObject = newFooObject;
    this.syncWithAsyncStorage();
  }

  syncWithAsyncStorage() {
    AsyncStorage.setItem('fooObject', JSON.stringify(this.fooObject));
  }
Run Code Online (Sandbox Code Playgroud)

然后,应用程序中的各个屏幕都会使用此 mobx 商店。

正如您所看到的,我们使用 RNAsyncStorage来始终存储 的当前状态,RN 是一种 LocalStorage,但对于本机应用程序而言fooObject

问题是:当应用程序关闭时,我们会丢失 FooStore 状态,因此我们想要检索对 AsyncStorage 所做的最后一次“保存”(已持久保存)。

问题是 AsyncStorage(正如其名称所示)是一个 ASYNC 函数,我们不能等待 FooStore 构造函数中的承诺解析。

如何根据 AsyncStorage 解析的返回值来完成此 MobX 存储的初始状态初始化?

我们考虑在 FooStore 中编写一个初始化方法(异步方法),如下所示:

async initializeFromAsyncStorage() {
  this.fooObject = await JSON.parse(await AsyncStorage.getItem('fooObject'));
}
Run Code Online (Sandbox Code Playgroud)

然后在我们的根 App.js 中的应用程序初始化时调用此方法。

但我不确定这是否会带来意想不到的副作用,以及这是否是惯用的 mobx/react-native。

react-native mobx

4
推荐指数
1
解决办法
6451
查看次数

“mobx-state-tree”中的模型和道具有什么区别?

在我看来,人们正在互换使用modelprops。我尝试查找有关道具的文档但失败了。有人可以告诉我有什么区别吗?

mobx mobx-state-tree

4
推荐指数
1
解决办法
1185
查看次数

如何在 Mobx 中将多个 Store 组合为 Root Store 并在彼此的字段和函数中访问

我不知道如何将两个商店合并到一个 RootStore 中(使用 Typescript)。例如,我有liveImageStore.ts(带有请求图像的方法,还保存最后 10 个图像的 url 数组)和notificationStore.ts(有一些逻辑来设置/清除通知,以便在整个应用程序中进一步使用。并在 liveImageStore 中请求.ts 提供了一些错误(例如,如果出现 http 连接问题)。我想在第一个商店的请求方法中调用notificationStore.ts中的函数(setNotification,推送新通知)。但是如何转发和输入它all?Notifier 组件显示消息使用 notificationStore。

javascript typescript reactjs mobx

4
推荐指数
1
解决办法
1919
查看次数

mobX:类型错误:无法读取未定义的属性

我只是用 mobX 玩了一些代码,就发生了这种情况,不知道为什么,但我确信它与官方文档没有太大不同

这是store.tsx

import { observable, computed, action, makeObservable, override, makeAutoObservable } from "mobx"

class CounterStore {
  initValue = 0
  powValue = Math.pow(this.initValue, 2)
  constructor() {
    makeAutoObservable(this)
  }
  increaseNumber() {
    this.initValue = this.initValue + 1
  }
}
const Store = new CounterStore()
export default Store
Run Code Online (Sandbox Code Playgroud)

这是我使用这个的地方。称为增量.tsx

import { observer } from "mobx-react"

export const IncrementButton = observer(({ store }) => {
  return (
    <div>
      <button onClick={store.increaseNumber}>Increase</button>
      <h1>{store.initValue}</h1>
    </div>
  )
})
Run Code Online (Sandbox Code Playgroud)

index.tsx

ReactDOM.render(
  <React.StrictMode>
    <IncrementButton store={Store} /> …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs mobx

4
推荐指数
1
解决办法
7187
查看次数

mobX-在响应国家时过滤国家吗?

我有3个国家/地区的数组,并输入了一个文本来过滤它们。如果输入文本输入,它将检查针对国家名称输入的内容,这将返回与过滤后的文本匹配的新的过滤后的国家列表。它还应在旁边显示输入的文本Typed Text:

import React, { Component } from 'react'
import { View, Text, TextInput } from 'react-native'
import { observable, action } from 'mobx';
import { observer } from 'mobx-react/native'

@observer
export default class Country extends Component {
    @observable filterTermValue;
    @observable countriesList = [
      {'slug': 'amsterdam', 'name': 'Amsterdam'},
      {'slug': 'usa', 'name': 'United States'},
      {'slug': 'vienna', 'name': 'Vienna'}
    ];

    render() {
        return (
            <View>
                <Text>Typed Text: {this.filterTermValue}</Text>
                <TextInput placeholder="Start typing country"
                   value={this.filterTermValue}
                   onChange={this.onChangeFilterTerm} />

                {this.countriesList.map(country =>
                    <View key={country.slug}>
                      <Text>{country.name}</Text>
                    </View> …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-native mobx

3
推荐指数
1
解决办法
1420
查看次数

Mobx @inject @observer命令

我有一个提取我componentDidMount不会刷新appState数据,@observer @inject('appState')但我会一直工作@inject('appState') @observer.

与此同时,我在控制台收到一条警告,说我的订单错了.

Mobx observer: You are trying to use 'observer' on a component that already has 'inject'. Please apply 'observer' before applying 'inject'

哪个订单正确,为什么?

mobx mobx-react

3
推荐指数
1
解决办法
821
查看次数

当观察到更改时,React Mobx componentDidUpdate不更新

我是Mobx和reactjs的新手,我了解Redux和本机响应,并且在Redux中,当我习惯于调用动作并且道具得到更新时,componentDidUpdate生命周期方法会被触发。

我现在遇到的情况是登录。因此,用户填写表单,单击提交,然后提交调用Mobx操作(异步),并且服务器响应时,观察对象将更新,然后导航到主页(在组件中进行导航)。

这是我的商店代码。

import { autorun, observable, action, runInAction, computed, useStrict } from 'mobx';

useStrict(true);

class LoginStore {
    @observable authenticated = false;
    @observable token = '';

    @computed get isAuthenticated() { return this.authenticated; }


    @action login = async (credentials) => {
        const res = await window.swaggerClient.Auth.login(credentials)l
        // checking response for erros
        runInAction(() => {
            this.token = res.obj.token;
            this.authenticated = true;
        });
    }
}

const store = new LoginStore();

export default store;

export { LoginStore };
Run Code Online (Sandbox Code Playgroud)

这个处理程序在我的组件中

handleSubmit = (e) …
Run Code Online (Sandbox Code Playgroud)

reactjs mobx mobx-react

3
推荐指数
1
解决办法
3285
查看次数

如何用打字稿的界面描述mobx-state-tree的模型?

我已经有了一些接口,我想用这个接口来描述模型,就像下面的代码一样.否则,我必须通过再次使用写typesmobx-state-tree.但这不是正确的方法,什么是有效的解决方案?

    import { types } from 'mobx-state-tree';

    export interface IPeople {
      name: string;
      age: number;
    }

    const Peoples = types
      .model({
        name: 'peoples',
        nancy: IPeople, // error at this line
      })

    export default Peoples;
Run Code Online (Sandbox Code Playgroud)

typescript mobx mobx-state-tree

3
推荐指数
1
解决办法
1908
查看次数

MobX与MobX状态树

为什么要在香草MobX上使用MobX状态树?好像我每次阅读有关MobX的文章时,都在同一个地方提到了MST。有人真的在使用MobX吗?

问题可能太笼统了...

javascript reactjs mobx mobx-state-tree

3
推荐指数
2
解决办法
1047
查看次数