我正在使用React 0.14和Babel 5.8.23开发一个JS应用程序。
我的应用在Chrome中工作正常,没有任何警告,但当我在IE9中查看该应用时,该应用爆炸显示:
SCRIPT5022: Exception thrown and not caught
就行了
ReactDOM.render(
当我捕获异常时,它表明它是从这段代码抛出的:
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
当我从生成的index.js
手动删除这些抛出时,应用程序正常进行,但我确实看到了这些警告(可能不相关,并在https://github.com/facebook/react/issues/4990进行了讨论):
Warning: MainLogo(...): React component classes must extend React.Component
我的所有组件都扩展了React.Component:
import React, { Component } from 'react';
export default class MainLogo extends Component {
render() {
return (
<h1 className="logo">
<img src="/img/brand/logo.png" />
</h1>
);
}
};
为什么在IE9中会触发此_classCallCheck
,我可以做些什么来阻止它呢?
答案 0 :(得分:3)
事实证明以下是IE9的问题:
import React, { Component } from 'react';
export default class Whatever extends Component { ...
我必须import React;
然后... extends React.Component
。
我必须将我的connect
ed组件导出为非顶级组件,即在文件中为它们命名:
export class App extends React.Component {
...
}
export const AppContainer = connect(state => ({ routerState: state.router }), { pushState }) (App);
我必须停用livereactload
https://github.com/milankinen/livereactload,特别是将其从.babelrc
使用的babel-plugin-react-transform
中删除。
只有完成所有这些步骤才能使我的应用程序在IE9上运行得令人满意。