Javascript 为什么不建议使用react、Angular和jQuery等外部库中的DOM操作

Javascript 为什么不建议使用react、Angular和jQuery等外部库中的DOM操作,javascript,reactjs,Javascript,Reactjs,我看过很多文章,人们不推荐在React中使用jQuery 有时我觉得我们可以用它们很快地完成一些操作。一些开发人员在他们的代码库中根本不包含jQuery,但他们使用许多npm模块,这些模块在内部可能使用jQuery jQuery Dom不是react diffing算法的一部分,那么它们如何影响性能呢?基本答案是: 1) 对于动画,jQuery不在浏览器中循环,不利用CSS3转换。这会占用移动浏览器的时钟周期(电池电量),这就是为什么在使用jQuery时会出现锯齿状、不平滑的动画。但更重要的是,

我看过很多文章,人们不推荐在React中使用jQuery

有时我觉得我们可以用它们很快地完成一些操作。一些开发人员在他们的代码库中根本不包含jQuery,但他们使用许多npm模块,这些模块在内部可能使用jQuery


jQuery Dom不是react diffing算法的一部分,那么它们如何影响性能呢?

基本答案是:

1) 对于动画,jQuery不在浏览器中循环,不利用CSS3转换。这会占用移动浏览器的时钟周期(电池电量),这就是为什么在使用jQuery时会出现锯齿状、不平滑的动画。但更重要的是,React DOM是特殊的,因为它在自己的内部维护DOM的完整副本(“虚拟DOM”)。现在考虑一下:您使用jQuery来更改DOM,但是React有一个旧的DOM副本。每次重新渲染时,它都会使用DOM的这个副本,所以您只是使它的副本与真正的DOM不同步。当您这样做时,非常糟糕的事情可能会发生在您身上,您基本上完全是在对React(虚拟DOM)的核心嗤之以鼻

如果您想在屏幕上制作动画或移动东西,请忘记关于jQuery的所有知识,学习CSS3转换。然后按反应的方式做

2) 对于所有未设置动画的函数(如实用程序函数),请尝试使用lodash或下划线等替代(较小)库。他们有地图,每个,弹拨,等为您的所有实用功能的需要


3) 我可以看到只对一些非常特殊的事情使用jQuery(例如throttle和debounce),但即使是那些现在也可能有其他选择

当您以react/angular没有监听的方式更改DOM时,您正在创建一个场景,其中存在的DOM与他们认为正在处理的DOM angular/react不匹配。没有什么能阻止angular/react破坏/撤消您对jquery所做的任何操作。为什么您觉得需要使用jquery?它具体允许你做什么,你不能没有它吗?我同意这一点,没有jQuery我们也可以做任何事情。熟悉jQuery,我倾向于使用它,但根据许多作者的说法,这是一种不好的做法。除了Kevin在上面指出的一点之外,你真的不想在没有反应的情况下更新dom,你在jquery中所做的大多数事情都可以通过常规javascript轻松实现,因此导入另一个库似乎毫无意义?谢谢你的支持你的时间@凯文和乔恩。我真的很感激。我想我现在很清楚了。谢谢你的时间,杰森。