React16的环境要求
官方文档明确指出因为React16
依赖集合类型Set
和Map
,如果需要支持IE11
以下的浏览器需要使用全局的polyfill
,解决方案也很简单。1
npm install -S @babel/polyfill
在代码入口处引入map和set1
2
3
4
5
6
7
8
9
10import 'core-js/es6/map';
import 'core-js/es6/set';
import React from 'react';
import ReactDOM from 'react-dom';
ReactDOM.render(
<h1>Hello, world!</h1>,
document.getElementById('root')
);
React 也依赖于 requestAnimationFrame
,你可以使用raf 包。1
npm install -S raf
导入入口文件1
import "raf/polyfill";
IE9和10静态方法继承的问题
这个问题跟React
无关,其实是babel的问题,在小于IE11的版本里,在做类的继承时,静态属性和方法是继承不到的,查看babel的文档可以找到解决方案
If you’re inheriting from a class then static properties are inherited from it via proto, this is widely supported but you may run into problems with much older browsers.
NOTE: proto is not supported on IE <= 10 so static properties will not be inherited. See the protoToAssign for a possible work around.
大概意思就是,正常的浏览器是没有问题的,在IE <= 10的时候,因为不支持proto,所以不会继承静态属性。可以通过@babel/plugin-transform-proto-to-assign来解决。
1 | // .babelrc |
react-loadable
IE10及以下都没有原生实现promise,react-loadable
也没有内置替换方法,所以需要手动引入promise,在入口文件添加一下代码导入promise的polyfill
1 | // react-loadable 用到promise |