在香草ES6 Javascript类中访问MobX存储

在香草ES6 Javascript类中访问MobX存储,javascript,mobx,Javascript,Mobx,这是小菜一碟。如果您希望您的MobX存储在任何React组件中都可用,只需使用MobX React@inject组件即可。比如: import React from 'react'; import {inject} from 'mobx-react'; @inject('myStore') class Dummy extends React.Component { 然后,我的商店作为道具提供: this.props.myStore.myMethod() 很好,很方便。。。只做反应。也许我遗漏

这是小菜一碟。如果您希望您的MobX存储在任何React组件中都可用,只需使用MobX React
@inject
组件即可。比如:

import React from 'react';
import {inject} from 'mobx-react';

@inject('myStore')
class Dummy extends React.Component {
然后,我的商店作为道具提供:

this.props.myStore.myMethod()


很好,很方便。。。只做反应。也许我遗漏了什么,但我找不到从普通ES6类访问我的商店的方法。如何在纯香草Javascript的普通ES6类中获得相同的结果?

您忘记了代码的开头是:

import { Store } from "./store";
import { Provider } from "mobx-react";
import * as React from "react";
import { render } from "react-dom";

var store = new Store();
render(
        <Provider {...stores}>
            <Component />
        </Provider>,
        document.getElementById('root'),
    );
工作原理
react组件将
存储
放在其react上下文中,请阅读以下内容:

这意味着存储在
的每个子组件中。 Inject只是简单地复制它:
this.props.store=this.context.mobx.store

因此,创建一个单例并在“普通”javascript类(无react子类/组件)中使用该单例是同一回事。

答案见account by。引用答案:

将存储导出为单件:

// Store.js

import { observable, computed } from 'mobx'

class Store {
  @observable numClicks = 0
  @computed get oddOrEven() {
    return this.numClicks % 2 === 0 ? 'even' : 'odd'
  }
}

const store = new Store()

export default store
。。。允许我们在应用程序中的任何位置导入和使用活动商店,次数可根据需要而定。

// Component.jsx

import store from Store

// use the global store in any component without passing it
// down through the chain of props from the root node

store.numClicks = 4
console.log(store.oddOrEven)
我使用这种方法已经有一段时间没有问题了。有什么需要注意的地方吗


链接到来源:

这可能是一本适合你阅读的书。React中没有任何东西是纯Javascript无法做到的。。根据定义,另一个好的相关读物是:this.props没有什么太具体的东西,谢谢。我知道我可以把商店传给下一个班级和下一个班级。。。(它是一个对象,应该作为引用传递)。但我想知道。有没有一种“MobX方式”不需要一路经过我的店铺?我的意思是,“mobx react”只是mobx所做事情的一堆方便的“代码快捷方式”。好吧,我想指出的是,例如mobx,它的核心是香草javascript。。客户端没有编译,甚至没有传输(这是一个词吗?)。。因此,自己编写是一项艰巨的任务,但这就是为什么要使用库。。没有必要重新发明轮子,但你一定要阅读源代码,看看它是如何工作的。谢谢Joel的回答。虽然我不想使用React,但你提到的“Singleton”是我找到正确轨道所需要的。是的,我只是解释了它的工作原理,以便你更好地了解正在发生的事情以及如何使用它。如果它有帮助,你可以投票给我的答案,让人们知道它的有用答案。
// Component.jsx

import store from Store

// use the global store in any component without passing it
// down through the chain of props from the root node

store.numClicks = 4
console.log(store.oddOrEven)