所以我有一个使用 Backbone 路由器的简单 React/Flux 应用程序。我有一个案例,用户创建了一个对象,路径从 /object/new 更新为 /object/:id。但是,不需要重新呈现页面,因为组件是相同的,并且由于在 ajax-create 调用返回后关联的存储更新,它会自行更新。
目前,我刚刚给路由器打了补丁,公开了一个只更新 url 的方法,实际上并没有点击特定于路由的方法。这感觉很老套,并没有真正解决需要添加/删除某些组件(即小部件)的情况(至少它消除了知道哪些组件需要从路由器中呈现的责任),但主要UI 不需要重新渲染。
所以这给我留下了三个问题:
最佳答案
React 的主要值(value)主张之一是重新渲染非常便宜。
这意味着您可以过度重新渲染而不会产生负面影响。这是 Backbone 的一个完整的 180,其中渲染非常昂贵,这导致您正在寻找逻辑,即如何避免渲染。
在幕后,React 通过将虚拟 DOM 与 DOM 进行比较来为您进行检查。换句话说:当你在 React 中使用暴露的渲染函数时,你并没有真正渲染 DOM,而只是用 Javascript 描述了 DOM 的新状态。
在实践中,这意味着如果您不计算很多值,您可以在没有任何优化步骤的情况下以每秒 60 帧的速度不断重新渲染。
这使您可以自由地完全“重新呈现”,即使您的应用中只有很少的内容实际发生变化。
所以我的建议是实际上不要尝试任何东西来阻止 React 重新渲染整个页面,即使没有任何变化。这种逻辑会增加复杂性,您可以通过在路由更改时无条件重新渲染来免费避免这种复杂性。从概念的 Angular 来看,这也是有道理的,因为路由只是全局应用程序状态。
能够做到这一点的自由是 React 令人敬畏的主要原因之一。
这是“过早的优化是万恶之源”的经典案例。
例如:我有时会在 mouseMove 事件上全局重新渲染整个 DOM 层次结构,并且没有观察到性能影响。
一般来说,将重新渲染视为零成本操作。现在你的 React 组件中可能有一些昂贵的操作。如果是这种情况,您可以使用 React 的生命周期方法来按需执行这些操作。尤其要看看 shouldComponentUpdate、componentWillReceiveProps 和 componentWillUpdate。
如果您使用的是 Flux 并且遵守不变性范例,则可以对状态和 Prop 进行非常便宜的引用相等性检查以按需工作。这样,您就可以提高性能。
使用 shouldComponentUpdate 方法,您可以在需要过多计算能力的情况下阻止渲染调用。但是,只有在您自己实现的昂贵操作导致性能提高时,我才会这样做。
在您的情况下,我会在根组件中注入(inject)路由状态,将它们作为 props 注入(inject)根的子组件中,并在它们上实现 shouldComponentUpdate 以防止渲染。
关于javascript - 无需重新渲染即可进行路由的 react 方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26465011/
我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>
鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende
我正在使用active_admin,我在Rails3应用程序的应用程序中有一个目录管理,其中包含模型和页面的声明。时不时地我也有一个类,当那个类有一个常量时,就像这样:classFooBAR="bar"end然后,我在每个必须在我的Rails应用程序中重新加载一些代码的请求中收到此警告:/Users/pupeno/helloworld/app/admin/billing.rb:12:warning:alreadyinitializedconstantBAR知道发生了什么以及如何避免这些警告吗? 最佳答案 在纯Ruby中:classA
在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这
question的一些答案关于redirect_to让我想到了其他一些问题。基本上,我正在使用Rails2.1编写博客应用程序。我一直在尝试自己完成大部分工作(因为我对Rails有所了解),但在需要时会引用Internet上的教程和引用资料。我设法让一个简单的博客正常运行,然后我尝试添加评论。靠我自己,我设法让它进入了可以从script/console添加评论的阶段,但我无法让表单正常工作。我遵循的其中一个教程建议在帖子Controller中创建一个“评论”操作,以添加评论。我的问题是:这是“标准”方式吗?我的另一个问题的答案之一似乎暗示应该有一个CommentsController参
我早就知道Ruby中的“常量”(即大写的变量名)不是真正常量。与其他编程语言一样,对对象的引用是唯一存储在变量/常量中的东西。(侧边栏:Ruby确实具有“卡住”引用对象不被修改的功能,据我所知,许多其他语言都没有提供这种功能。)所以这是我的问题:当您将一个值重新分配给常量时,您会收到如下警告:>>FOO='bar'=>"bar">>FOO='baz'(irb):2:warning:alreadyinitializedconstantFOO=>"baz"有没有办法强制Ruby抛出异常而不是打印警告?很难弄清楚为什么有时会发生重新分配。 最佳答案
rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD