Декоратор не применяет функцию рендеринга к прототипу класса в приложении «Метеор + реакция»

avatar
vacarsu
7 апреля 2018 в 22:48
155
1
1

У меня есть decorator, который применяет функцию рендеринга к прототипу компонента реакции, однако, когда я запускаю приложение в браузере, я получаю следующую ошибку.

Warning: App(...): No 'render' method found on the returned component instance: you may have forgotten to define 'render'.

Вот код декоратора

export function App(setup) {
    return function(target) {
        target.prototype.render = () => (
           <MuiThemeProvider muiTheme={getMuiTheme(setup.config.theme)}>
               <IntlProvider locale={setup.config.locale}>
                   <Provider
                       store={setup.config.state.store ?
                       setup.config.state.store
                       :
                       initializeRedux(setup.config.state.reducers, setup.config.state.initialState)}
          >
                       <Router>
                           <div>
                               {setup.pages.map((page, i) =>
                                   <Route key={i} {...page} />
                                )}
                                {setup.render ? setup.render() : ""}
                            </div>
                        </Router>
                    </Provider>
                </IntlProvider>
            </MuiThemeProvider>
        )
        return target;
    }
}

И реактивный компонент

@DimApp({
    pages: [
        { path: '/', component: HomePage, children: [] }
    ],
    config: {
        theme,
        locale: 'en',
        state: {
          store
        }
    }
})
export default class App extends Component {
      constructor(props) {
        super(props);
      }
}
Источник

Ответы (1)

avatar
MasterAM
8 апреля 2018 в 10:36
1

Вероятно, вы не включили соответствующий подключаемый модуль Babel (babel-plugin-transform-decorators-legacy).

Чтобы включить его, вы должны установить пакет и добавить его в свою конфигурацию:

meteor npm i -S babel-plugin-transform-decorators-legacy

и добавьте его в свой package.json или .babelrc,

{
  "plugins": ["babel-plugin-transform-decorators-legacy"]
}

также указано в этом выпуске GitHub.

vacarsu
9 апреля 2018 в 22:09
0

Спасибо, это было проблемой. Я бы подумал, что декораторы будут включены по умолчанию в метеоре. Думаю нет :)