详解React项目中碰到的IE问题
最近接手一个React项目,在IE下碰到了俩问题
IE11报错如下:
跟踪一下之后,发现是一些其他的npm包里面用到了startsWith这个方法,可以自己polyfill一下:
if (!String.prototype.startsWith) { String.prototype.startsWith = function (search, pos) { return this.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search } }
不过加prototype的方法毕竟不好,可以通过引入@babel/polyfill
解决,在入口文件中引入import '@babel/polyfill'
;
IE11问题解决后,IE10又出问题了。。。
犯了stackoverflow和github的很多帖子之后,在这个帖子里找到,发现是Object.setPrototypeOf
的问题,Object.setPrototypeOf说是支持了IE9-11, 实际在源码里只实现了11+(https://github.com/paulmillr/es6-shim/blame/master/README.md#L78)
解决办法可以是在polyfill url后加上excludes=Object.setPrototypeOf
, 或者自己实现Object.setPrototypeOf
方法,我这里引入了一个库setprototypeof,然后在入口文件中加上Object.setPrototypeOf = require('setprototypeof');
其实这个库里的实现代码非常少, 可以简单看下
'use strict' /* eslint no-proto: 0 */ module.exports = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array ? setProtoOf : mixinProperties) function setProtoOf (obj, proto) { obj.__proto__ = proto return obj } function mixinProperties (obj, proto) { for (var prop in proto) { if (!obj.hasOwnProperty(prop)) { obj[prop] = proto[prop] } } return obj }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
React-Native实现ListView组件之上拉刷新实例(iOS和Android通用)
本篇文章主要介绍了React-Native实现ListView组件之上拉刷新实例(iOS和Android通用),具有一定的参考价值,有兴趣的可以了解一下2017-07-07react-router v6实现权限管理+自动替换页面标题的案例
这篇文章主要介绍了react-router v6实现权限管理+自动替换页面标题,这次项目是有三种权限,分别是用户,商家以及管理员,这次写的权限管理是高级权限能访问低级权限的所有页面,但是低级权限不能访问高级权限的页面,需要的朋友可以参考下2023-05-05React-Native之截图组件react-native-view-shot的介绍与使用小结
这篇文章主要介绍了React-Native之截图组件react-native-view-shot的介绍与使用小结,需本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,要的朋友可以参考下2021-08-08一文搞懂 React 18 中的 useTransition() 与 useDeferredValue()
这篇文章主要介绍了一文搞懂 React 18 中的 useTransition()与useDeferredValue(),文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下2022-09-09
最新评论