标签: mobx

带有动态字段的 mobx-react-form

我们使用 mobx-react-form ( https://github.com/foxhound87/mobx-react-form ) 作为我们的表单。我们的一种表格有一个多选下拉菜单。根据选择,在表单中添加/删除字段。这如何以 mobx-react-form 进行管理?

mobx mobx-react

5
推荐指数
0
解决办法
1479
查看次数

React Native 和 MobX:如何创建全球商店?

我目前正在尝试实现一个 mobx 存储,我可以像这样从任何地方调用它:

import {userStore} from '../UserStore.js';
Run Code Online (Sandbox Code Playgroud)

在文件末尾,我的导出功能如下所示:

const userStore = new UserStore();
export {userStore};
Run Code Online (Sandbox Code Playgroud)

据我了解,每次调用该import功能时,都会重新创建该对象,其中导入 UserStore 的多个文件不共享相同的变量。

但是,我希望UserStore导入的每个文件都使用完全相同的变量导入相同的对象。我怎样才能做到这一点?我不完全确定如何实现,因此将不胜感激任何想法和示例:)

完整代码(用于 UserStore.js 声明),如果有帮助,如下(查看最底部的 export 语句)

import {observable, computed, action} from 'mobx';
import {ObservableMap, toJS} from 'mobx';
import {Fb} from './firebase.js';

class UserStore {

  /** GPS */
  @observable usrLng = 0.0;
  @observable usrLat = 0.0;
  @observable watchID = null;

  @action
  watchCurLocation() {
    this.watchID = navigator.geolocation.watchPosition((position) => {
      console.log("Recording GPS data from within the Store!!");
      this.usrLat = parseFloat(position.coords.latitude);
      this.usrLng …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-native react-redux mobx

5
推荐指数
1
解决办法
1851
查看次数

MobX 在推送到数组时不更新 React 视图

我的 Store.js:

import { observable, useStrict, action } from 'mobx';

useStrict(true);

export const state = observable({

    contacts: []

});

export const actions = {

    addContact: action((firstName, lastName) => {
        state.contacts.push({
            id: Math.floor((Math.random() * 1000) + 1),
            firstName: firstName,
            lastName: lastName
        });
    })

};
Run Code Online (Sandbox Code Playgroud)

我的 index.js:

import React from 'react';
import { Provider } from 'mobx-react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import registerServiceWorker from './registerServiceWorker';
import { state, actions } from './Store';

ReactDOM.render(
    <Provider state={state} actions={actions}> …
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-6 reactjs mobx mobx-react

5
推荐指数
1
解决办法
8716
查看次数

ReactJS .default 不是构造函数

我是 React 和 Mobx 的新手,所以我尝试做一个小应用程序。当我尝试运行它时,我收到错误:Uncaught TypeError: _releasesState2.default is not a constructor. 因为我不知道问题是什么,所以我要猛烈抨击我的头。这是我到目前为止所得到的:

我的 index.js:

import React from "react";
import ReactDOM from "react-dom";

import Releases from "./components/releases";

class App extends React.Component {
  constructor() {
    super();
  } 
  render() {
    return (
        <div>
           <Releases />
        </div>
     )
  }
}

ReactDOM.render(<App/>, window.document.getElementById("app"));
Run Code Online (Sandbox Code Playgroud)

release.js:

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

import ReleaseState from "./releases-state";

@observer
export default class Releases extends React.Component {
   constructor() {
     super();

    this.state = new ReleaseState(); …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs mobx

5
推荐指数
1
解决办法
5978
查看次数

Mobx doesn't observe classes in observable array

If I push a class instance into an observable array in MobX then it is not observed. However if I push a literal object into an observable array then it will be observed.

The docs for observable arrays say that

"all (future) values of the array will also be observable"

so I am trying to understand why this happens.

For example the following code can be run in node:

let mobx = require('mobx');

class TodoStore {
  constructor() {
    this.todos = …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs mobx

5
推荐指数
1
解决办法
1482
查看次数

使用 react native i18n 更改 react native 应用程序中的语言不起作用

当用户选择语言时,我试图在运行时更改我的应用程序的语言。我正在尝试这样做

import I18n from 'react-native-i18n'

onChangeLanguage = () => {
    console.log('String before change : >>> ', I18n.t('welcome'))
    I18n.locale = 'hi'
    console.log('String after change : >>> ', I18n.t('welcome'))
}
Run Code Online (Sandbox Code Playgroud)

在两个日志中,我得到了相同的 string 。我从这里参考。在此参考中,有一个使用 redux 的示例,但我的用例是使用 mobx。如果语言更改了如何重新渲染组件以反映语言更改。

android react-native mobx react-native-android react-native-ios

5
推荐指数
0
解决办法
1621
查看次数

如何在 React Native 中持久化 Mobx 状态树?

我需要在 React Native 中保留一个 MST Store。数据很少更改。

我对使用 AsyncStorage 和 AutoRun 感到困惑。

react-native mobx mobx-state-tree

5
推荐指数
1
解决办法
2124
查看次数

在 React 应用程序中从商店更改路线

我有一个 React 组件,它接收用户名和密码并将其发送以进行身份​​验证。如果身份验证成功,页面应该移动到呈现另一个组件的不同路由。

现在的问题是,我不确定如何从我的商店更改路线?即不使用<Link>React Router的组件?我知道我们可以使用this.props.history.push(/url)以编程方式更改路由,但它只能在 React 组件中使用 using <Route>,而不能在商店中使用。

我使用 React16 和 MobX 进行状态管理,使用 ReactRouter V4 进行路由。

店铺:

class Store {
    handleSubmit = (username, password) => {
        const result = validateUser(username, password);
        // if result === true, change route to '/search' to render Search component
    }
}
Run Code Online (Sandbox Code Playgroud)

登录组件:

const Login = observer(({ store }) => {
    return (
        <div>
           <form onSubmit={store.handleSubmit}>
                <label htmlFor="username">User Name</label>
                <input type="text" id="username" onChange={e => store.updateUsername(e)} value={store.username} />
                <label htmlFor="password">Password</label>
                <input …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-router mobx

5
推荐指数
1
解决办法
1151
查看次数

如何在render方法中不使用observable时使MobX更新组件?

从Redux切换到MobX for React后,我开始非常喜欢MobX.这太棒了.

如果在渲染中未使用提供的商店observable,则MobX具有某种行为,它不会更新组件.我认为通常这是一个非常好的行为,只有在实际发生了变化时才会使组件呈现.

但是......我确实遇到过几种我不想要或者需要在渲染方法中使用MobX observable的情况,在这种情况下我this.props.store的MobX存储不会更新.

在这种情况下,作为一种解决方法,我只是在render方法中引用observable,但我认为这不是一个非常干净的方法,我想知道是否有更简洁的方法来做到这一点?

这个组件代码应该更多地解释我正在询问的内容.它是一个基于我在商店中拥有的MobX observable来改变体溢出样式的组件.

/*------------------------------------*\
  Imports
\*------------------------------------*/
import React from 'react';
import connectStore from 'script/connect-store';
import addClass from 'dom-helpers/class/addClass';
import removeClass from 'dom-helpers/class/removeClass';


/*------------------------------------*\
  Component
\*------------------------------------*/
class Component extends React.Component {

  constructor(props) {
    super(props);
    this.constructor.displayName = 'BodyClassSync';
  }

  componentDidMount() {
    this.checkAndUpdateMuiClass();
  }

  componentDidUpdate() {
    this.checkAndUpdateMuiClass();
  }

  checkAndUpdateMuiClass() {

    // This place is the only place I need latest MobX store... 
    if (this.props.store.muiOverlay) {
      addClass(window.document.body, 'mod-mui-overlay');
    }

    else {
      removeClass(window.document.body, 'mod-mui-overlay');
    }

  }


  render() …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs mobx mobx-react

5
推荐指数
1
解决办法
1008
查看次数

错误:[mobx-state-tree]无法解析引用XXX以键入“用户”

语境

我有一个由mobx-state-tree(MST)支持的React应用程序。其中一个页面进行两个并行的 API调用,以获取的列表Projects和系统的列表Users

然后,将这两个API的响应作为快照应用到同一树中的两个兄弟节点。项目模型的所有者字段是指用户模型。

我的问题是,GET项目API调用通常比GET Users API调用更早完成。经典的“比赛条件”。因此,当MST尝试取消引用所有者值时,具有此类标识符的用户在树中不可用,并且出现如下运行时错误:

错误:[mobx-状态树]无法解析引用'dtGNbVdNOQIAX0OMGaH2r2oSEf2cMSk9AJzPAf4n7kA'以键入“用户”(来自节点:/ projectListStore / projects / 0 / owner)

如何解决该错误?

请注意,进行API调用相互依赖(awaitusers.load().then(users => { projects.load(); })不是我们项目的选择。

MST模型

export const ProjectModel = types
  .model('Project', {
    projectId: types.optional(types.identifierNumber, 0),
    title: '',
    descriptionStatus: '',
    projectStatus: '',
    startDate: CustomDate,
    endDate: CustomDate,
    owner: types.maybeNull(types.reference(User)), // -----
  })                                                        \ 
  // ...                                                     |
                                                             |
export const User = types                                    |
  .model('User', {                                          /
    userId: types.identifier,                      // <<<--
    userName: '',
    firstName: '', …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs mobx mobx-state-tree

5
推荐指数
2
解决办法
813
查看次数