使用jquery在react组件内部设置样式可以吗
Is it ok to style inside react components using jquery
我是react的新手,我知道操纵react与Jquery组成的dom是一个非常糟糕的想法。然而,在通过使用Jquery进行react渲染的dom组件上操作样式是个坏主意吗?
ReactDom.render( <LoginPage/>, document.getElementById('root') );
//after render call activateJQ();
var activateJQ = function(){
$('button').animate({
backgroundColor: "#aa0000",
color: "#fff",
width: 500
}, 1000 );
$('.error-msg').css("color","red");
};
它在这个页面上有效,但我想把它合并到更复杂的页面中,这些页面可以更改状态并重新发布。地址组件与添加的样式将如何反应?
简短的回答是:可以。但这是一个非常糟糕的主意,如果你这样做了,你会后悔的
在您的特定示例中,使用jQuery应用样式(颜色或错误消息)和动画样式(按钮的背景颜色等)不会破坏任何内容。
也就是说,使用react应用样式有一些特定的优势:您必须在组件生命周期的正确时刻应用样式(在分配给组件的css类中)和动画(在componentDidMount()
或使用<ReactCSSTransitionGroup>
)。这使您的代码更容易调试:如果您的样式出现问题,您可以在react中的正确位置找到所有可疑代码。
记住:react是一个动态引擎,它可以根据用户操作更改DOM的结构。css样式与DOM结构紧密耦合,因此您希望它们同步(从而在代码中的同一位置进行管理)。
在您的具体情况下,我可以想到至少一种情况,即您的react+jQuery设置出现故障:
ReactDOM.render()
运行并启动反应发动机- 初始react渲染周期有2个按钮和1条错误消息
- 应用jQuery,为2个按钮和1条错误消息设置动画
- 用户进行了一些单击
- react使用2个新按钮和1条新错误消息重新渲染
- 您的jQuery不再运行
- 新的react按钮和错误消息没有获得新的样式
或者,如果您在react:中的每个render()
之后调用activateJQ()
- 1000ms超时可能会与渲染周期不同步,因此可能会导致不必要的DOM更新,或者更糟的是,如果react在jQuery更新期间更改DOM,则会中断
- 带有样式更新的jQuery类选择器是一个出了名的粗糙(因此会扼杀性能)工具。它需要每次遍历整个DOM来进行更新,其中包括对甚至不需要更新的组件的更新。在react中管理样式要高效得多:样式只应用于需要它的组件,并且只在它们需要它的时候应用
随着应用程序的增长,您会发现混合使用react和jQuery来管理DOM和样式(这两者之间非常相互依赖)将变得难以管理。
相关文章:
- 对插件初始化后动态加载的元素进行样式设置
- 使用jQuery按条件将样式设置为html标记
- 将 href 样式设置为按钮
- 如何以类似于vivus.js的样式设置SVG填充和路径的动画
- 根据用户输入声明样式设置
- 更改:在使用Javascript进行样式设置之前
- 反应:使用内联样式设置所有元素的样式
- 在AngularJS中构建SPA应用程序与纯JavaScript - 选择哪种Boostrap进行样式设置
- 我将如何使用CSS3对动态创建的jQuery UI元素进行样式设置
- Tumblr JS嵌入CSS/HTML标签进行样式设置
- 如何使用 ng 样式设置元素宽度 % 的样式
- 如何使用 Web 浏览器控件进行样式设置,但具有 C# 中的逻辑
- 从 javascript 获取样式设置时出现问题
- 样式设置 jQuery 验证错误消息
- 使用 React-Toolbox 的按钮进行样式设置不起作用
- 如何将离子输入类型文件的样式设置为按钮
- 如何将加载到<对象>中的元素样式设置为数据
- CKEDITOR没有't对来自数据库的文本进行样式设置
- 如何对一个元素进行ng样式设置's$索引由ng repeat创建
- D3可以't将样式设置为带标题的对象