在香草ES6 Javascript类中访问MobX存储
这是小菜一碟。如果您希望您的MobX存储在任何React组件中都可用,只需使用MobX React在香草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() 很好,很方便。。。只做反应。也许我遗漏
@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)