javascript - Mobx 存储未注入(inject)

标签 javascript reactjs mobx mobx-react

我尝试做那个存储对象 UserStore.js

import { observable, action } from 'mobx';

class UserStore {

    constructor() {
        const me = observable({
            me: null,
            auth: action.bound(function(me) {
                this.me = me;
            })
        })
    }
}

export default UserStore;

在此之后,我会这样做

App.js

   const App = inject('routing','UserStore')(observer(class App extends Component {
    constructor(props, context) {
        super(props, context);
        this.handleFiles = this.handleFiles.bind(this);
        this.prepareTable = this.prepareTable.bind(this);
        this.state = {excel: null};
    }

    render() {
        const {location, push, goBack} = this.props.routing;
        const {userStore} = this.props.userStore;

在index.js 中我也这样做

    const stores = {
    // Key can be whatever you want
    routing: routingStore,
    UserStores
};

const history = syncHistoryWithStore(browserHistory, routingStore);

ReactDOM.render(
    <Provider {...stores}>
        <Router history={history}>
            <Entry/>
        </Router>
    </Provider>,
    document.getElementById('root')
);

让我们完成这一切之后,我尝试打开 localhost:3000 并看到此错误

Error: MobX observer: Store 'UserStore' is not available! Make sure it is provided by some Provider

更新: 我正在使用 create-react-app 创建一个项目,但我无法在代码中使用 @(@injector 的示例)

最佳答案

我认为你应该返回商店的一个实例。 为了更有条理,我有一个像“storeInitializer.ts”这样的文件(在这里使用 typescript ):

import YourStoreName from '../yourStoreFolder/yourStore';

export default function initializeStores() {
    return {
        yourStoreName: new YourStoreName(),
    }
}

然后我有另一个文件,如“storeIdentifier.ts”:

export default class Stores {
    static YourStoreName: string = 'yourStoreName';
}

在应用程序文件中我做了这样的事情:

import React from 'react';
import { inject, observer } from 'mobx-react';
import Stores from './storeIdentifier';

const App = inject(Stores.YourStoreName)(observer(props: any) => {
    //code here
});

export default App;

或者如果您使用类组件方法...

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

@inject(Stores.YourStoreName)
@observable
class App extends Component {
    //code here
}

export default App;

关于javascript - Mobx 存储未注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44197404/

相关文章:

javascript - 验证javascript日期

javascript - 使用 redux + redux thunk 等待后台任务的惯用方式

reactjs - 如何在组件外部调用 GraphQL

javascript - MobX 装饰器不工作

javascript - 上下文在不同用户之间共享

javascript - MobX Observables 与 RxJS 有什么关系吗?

javascript - 如何分割一个字符串,然后将第二个字符串(链接)嵌入到第一个字符串中?

javascript - 如何在 React JS 中一次更新嵌套对象中所有键的值?

javascript - React - 语法错误 : unexpected token <

javascript - 允许多个 CSS 类使用相同的 JS 函数(Slick Carousel)