React Fire:React DOM 的改造计划,使其更现代化

2018 年 9 月 3 日 前端大全

(点击上方公众号,可快速关注)

来源:开源中国


React 开发者,同时也是 Redux 和 Create React App 作者之一的 Dan Abramov gaearon 昨日在 React 的 GitHub 仓库提了一个这样的 issue —— React Fire: Modernizing React DOM(React Fire:使 React DOM 现代化)。他表示目前随着对 React 的底层基础改造工作越来越接近尾声,维护团队开始考虑如何使 React 更好地与 DOM 的工作方式保持一致,并重新审视了过去一些导致大量问题的有争议的决策,同时希望使 React 变得更小更快。



Dan 表示,目前 React DOM 存在着相当多的已知问题,如果没有更大的内部变化,其中一些问题很难或根本无法修复,这些问题导致了无数的后续修复工作并产生了大量的技术债务。在这项被称为 React Fire 的现代化 Reat DOM 改造计划中,开发团队希望删除事件系统中的一些抽象,这些抽象从 React 诞生以后就几乎没有被触及,并且是系统复杂性和项目包变大的根源。


Dan 详细介绍了目前关于 React Fire 的一些想法:


  • 停止在 value 属性中映射输入值。这最初在 React 15.2.0 中被添加,它是一个非常普遍的要求,因为人们对 DOM 的概念模型是他们在 DOM 检查器中看到的值应该与 JSX 的属性匹配。但这并不是 DOM 的工作方式。当你在键入字段时,浏览器不会更新 value 属性,那么 React 也不应该这样做。事实证明,这种变化虽然可能对依赖 CSS 选择器的一些代码有所帮助,但却引发了一系列 bug,其中一些仍未得到修复。

  • 在 React 根目录而不是 document 对象中添加事件。将 React 应用程序嵌入到更大的系统中时,将事件处理程序添加到 document 对象会成为一个问题。Atom 编辑器是最早遇到这种情况的案例之一。任何大型网站最终也会发展出与 stopPropagation 相关的非常复杂的边缘案例,它们与非 React 代码或跨 React 进行交互。

  • 从 onChange 迁移到 onInput,并且不要填充不受控制的组件。React 在 DOM 中使用不同的事件名称来表示输入事件这让人十分困惑。虽然我们通常避免在没有显著优势的情况下进行这样的大改动,但在这种情况下,还是希望去消除一些复杂性,这些复杂性仅对改变控制输入等边缘情况是必需的。因此,将这两个更改结合在一起是有意义的,并将其用作为一种 onInput 和 onChange 完全按照 DOM 事件对不受控制的组件执行的操作的尝试。

  • 大大简化事件系统。自 2013 年实现以来,当前事件系统几乎没有变化。它在 React DOM 和 React Native 中被重复使用,因此它是不必要的抽象。它提供的许多 polyfills 对于现代浏览器来说是不必要的,并且其中一些会产生比他们解决的问题更多的问题。它也占据 React DOM 包的很大一部分。关于这一点,目前还没有非常具体的计划,但是可能会完全将事件系统再 fork 一份出来,然后看看在更接近 DOM 赋予的东西的时候可以去做些什么。而完全摆脱冒泡事件似乎是合理的。应该停止冒泡活动,比如媒体事件,这些事件不会在 DOM 中冒泡,也没有充分的理由冒泡。

  • className → class。这已经被提出了无数次。目前已经允许在 React 16 中将 class 传递到 DOM 节点中,这样做导致的混乱实际上是比语法限制来得有意义的。


Dan 还表示,为了达成此目标,可能需要降低与某些旧浏览器的兼容性,并且可能需要更多独立的 polyfill,详情可以查看原文:


  • https://github.com/facebook/react/issues/13525


对于这个 issue,你是怎么看待的呢?欢迎在评论中留下你的想法。



【关于投稿】


如果大家有原创好文投稿,请直接给公号发送留言。


① 留言格式:
【投稿】+《 文章标题》+ 文章链接

② 示例:
【投稿】《不要自称是程序员,我十多年的 IT 职场总结》:http://blog.jobbole.com/94148/

③ 最后请附上您的个人简介哈~



觉得本文对你有帮助?请分享给更多人

关注「前端大全」,提升前端技能

登录查看更多
0

相关内容

React.js(React)是 Facebook 推出的一个用来构建用户界面的 JavaScript 库。

Facebook开源了React,这是该公司用于构建反应式图形界面的JavaScript库,已经应用于构建Instagram网站及 Facebook部分网站。最近出现了AngularJS、MeteorJS 和Polymer中实现的Model-Driven Views等框架,React也顺应了这种趋势。React基于在数据模型之上声明式指定用户界面的理念,用户界面会自动与底层数据保持同步。与前面提及 的框架不同,出于灵活性考虑,React使用JavaScript来构建用户界面,没有选择HTML。Not Rest

AI创新者:破解项目绩效的密码
专知会员服务
33+阅读 · 2020年6月21日
【干货书】现代数据平台架构,636页pdf
专知会员服务
253+阅读 · 2020年6月15日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
大数据安全技术研究进展
专知会员服务
92+阅读 · 2020年5月2日
【电子书】C++ Primer Plus 第6版,附PDF
专知会员服务
87+阅读 · 2019年11月25日
转岗产品经理,花了3个月都做不好需求工作
人人都是产品经理
10+阅读 · 2019年9月16日
微信小程序支持webP的WebAssembly方案
前端之巅
19+阅读 · 2019年8月14日
2020年你应该知道的8种前端JavaScript趋势和工具
前端之巅
5+阅读 · 2019年6月9日
使用 C# 和 Blazor 进行全栈开发
DotNet
6+阅读 · 2019年4月15日
去哪儿网开源DNS管理系统OpenDnsdb
运维帮
21+阅读 · 2019年1月22日
React Native 分包哪家强?看这文就够了!
程序人生
13+阅读 · 2019年1月16日
PyTorch 1.0 稳定版正式发布!
新智元
3+阅读 · 2018年12月8日
Python3.7中一种懒加载的方式
Python程序员
3+阅读 · 2018年4月27日
Vue.js 很好,但是比 Angular 或 React 更好吗?
程序猿
3+阅读 · 2017年8月27日
Learning in the Frequency Domain
Arxiv
11+阅读 · 2020年3月12日
Arxiv
11+阅读 · 2018年4月8日
VIP会员
相关VIP内容
相关资讯
转岗产品经理,花了3个月都做不好需求工作
人人都是产品经理
10+阅读 · 2019年9月16日
微信小程序支持webP的WebAssembly方案
前端之巅
19+阅读 · 2019年8月14日
2020年你应该知道的8种前端JavaScript趋势和工具
前端之巅
5+阅读 · 2019年6月9日
使用 C# 和 Blazor 进行全栈开发
DotNet
6+阅读 · 2019年4月15日
去哪儿网开源DNS管理系统OpenDnsdb
运维帮
21+阅读 · 2019年1月22日
React Native 分包哪家强?看这文就够了!
程序人生
13+阅读 · 2019年1月16日
PyTorch 1.0 稳定版正式发布!
新智元
3+阅读 · 2018年12月8日
Python3.7中一种懒加载的方式
Python程序员
3+阅读 · 2018年4月27日
Vue.js 很好,但是比 Angular 或 React 更好吗?
程序猿
3+阅读 · 2017年8月27日
Top
微信扫码咨询专知VIP会员