undefined не является функцией (оценка 'decorator (target, property, desc)')

Я хочу интегрировать mobx и mobx-persist с помощью реакции-навигации.
I прочтите эти статьи:

[1] https://hackernoon.com/react-navigation-with-mobx-2064fcdaa25b
[2] https://blog.callstack.io/write-react-native-apps-in-2017-style-with-mobx-e2dffc209fcb
[3] https://github.com/react-navigation/react-navigation/blob/8e8d3d562c9e80616f145f97ffb02dcf2048e67e/docs/guides/Mobx-Integration.md
[4] MobX + React Native: способ внедрения магазинов
[5] MobX - Почему должен ли я использовать `наблюдатель`, когда я мог бы использовать` inject` при вводе данных в компонент React
[6] Внедрение Store в компонент React приводит к ошибке

Но я все равно получаю эту ошибку:

undefined is not a function (evaluating 'decorator(target, property, desc)')

Это мой рендер из App.js:

render() {
    const hydrate = create({
        storage: AsyncStorage
    });

    hydrate('playerStore', stores.PlayerStore);
    hydrate('settingStore', stores.SettingStore);
    // .then(
    //     // () => console.warn('some hydrated')
    // );

    return <Provider {...stores} >
        <AppWithNavigationState />
    </Provider>;
}

Это мой routeStore.js:

import {observable} from "mobx";
import {action} from "mobx-react/native";
import AppDrawer from "../appDrawer";
import {autobind} from 'core-decorators';

export default class RouteStore {
    @observable.ref navigationState = {
        index: 0,
        routes: [
            { key: "R1", routeName: "ContentStack" },
        ],
    };

    @action
    dispatchNavigation(action, stackState = true) {
        const previousNavState = stackState ? this.navigationState : null;
        return this.navigationState = AppDrawer.router.getStateForAction(action, previousNavState);
    }
}

Это мой appWithNavigationState.js:

import React from 'react';
import {observer, inject} from "mobx-react/native";
import {addNavigationHelpers} from "react-navigation";
import AppDrawer from "../appDrawer";

@inject(stores => ({ routeStore: stores.RouteStore }))
@observer
export default class AppWithNavigationState extends React.Component {
    render() {
        return (
            <AppDrawer navigation={addNavigationHelpers({
                dispatch: this.props.routeStore.dispatchNavigation,
                state: this.props.routeStore.navigationState,
            })} />
        );
    }
}

Я также использую пакет декоратора, как показано ниже:

npm install babel-plugin-transform-decorators-legacy --save-dev

и этот параметр в babelrc файле:

{
  "presets": ["react-native"],
  "plugins": ["transform-decorators-legacy"]
}

Вы можете помочь мне это исправить?


person b24    schedule 30.01.2018    source источник
comment
Обратитесь к руководству по поддержке для mobx и убедитесь, что вы используете правильную версию react-native.   -  person uneet7    schedule 28.01.2019


Ответы (1)


По умолчанию конфигурация преобразования React Native Babel не включает поддержку декораторов ES7.

Вы можете добавить их, предварительно установив пакет декоратора:

npm install babel-plugin-transform-decorators-legacy --save-dev

А затем добавляем плагин в ваш .babelrc файл в корень проекта:

{
  "presets": ["react-native"],
  "plugins": ["transform-decorators-legacy"]
}
person jevakallio    schedule 06.02.2018
comment
Я также добавил этот плагин позже. Это не моя проблема. Пожалуйста, прочтите мой вопрос еще раз. - person b24; 09.02.2018