当前位置: 首页 > 面试题库 >

将React与Backbone一起使用时,可以避免使用forceUpdate()吗?

曾元忠
2023-03-14
问题内容

Facebook React
鼓励您将可变(state)和不可变(props)状态分开:

尝试使尽可能多的组件保持无状态。通过这样做,您可以将状态隔离到最逻辑的位置,并最大程度地减少冗余,从而使推理应用程序更加容易。

当状态更改时,应该调用setState触发虚拟DOM diff,这仅在需要时才引起真正的DOM更新。


一种方法来触发DOM更新手动调用forceUpdate,但它是灰心:

通常情况下
,你应该尽量避免的所有使用forceUpdate()和只读this.props,并this.staterender()。这使您的应用程序更加简单和高效。

但是,我看到的所有React + Backbone示例都 忽略了此建议, 并在其中存储模型和集合props并调用forceUpdate

  • http://www.thomasboyt.com/2013/12/17/using-reactjs-as-a-backbone-view.html
  • https://github.com/usepropeller/react.backbone/blob/master/react.backbone.js
  • https://gist.github.com/ssorallen/7883081
  • http://eldar.djafarov.com/2013/11/reactjs-mixing-with-backbone/

甚至React自己的示例也使用forceUpdate

  • https://github.com/facebook/react/blob/master/examples/todomvc-backbone/js/app.js#L148

但是,有没有更好的方法,它将带来什么好处?


问题答案:

皮特的答案很好。

骨干模型本质上是可变的,这(虽然本身不​​是问题)意味着重新渲染时,您将没有模型的旧版本可与之进行比较。通过shouldComponentUpdate在组件上关键位置定义方法,使进行智能优化变得更加困难。(由于其他原因,例如实现undo,您也失去了轻松存储模型旧版本的能力。)

调用forceUpdate仅跳过shouldComponentUpdate并迫使组件重新呈现。请注意,调用render通常很便宜,并且当输出render更改时,React仍然只会接触DOM
,因此这里的性能问题并不常见。但是,如果您选择使用不可变数据(包括toJSON()像Pete建议的那样传递原始模型属性对象),则强烈建议您使用。



 类似资料:
  • Facebook React鼓励您将可变()和不可变()状态分开: 尽量让您的组件尽可能多的无状态。通过这样做,您可以将状态隔离到最符合逻辑的位置,并最大限度地减少冗余,从而更容易对应用程序进行推理。 当状态改变时,您应该调用来触发虚拟DOM diff,只有在需要时才会导致真正的DOM更新。 有一种方法可以通过调用手动触发DOM更新,但不鼓励: 通常情况下,您应该尽量避免使用,并且只从和中的读取。

  • 问题内容: 是否可以使用Node.js在服务器端使用jQuery选择器/ DOM操作? 问题答案: 似乎有一个重大更新,导致原来的答案不再起作用。我找到了这个答案,解释了现在如何使用。我已经在下面复制了相关代码。 注意:原始答案没有提及你还需要使用安装

  • 我需要一些目前在JavaFX中找不到的功能。比如机器人或托盘图标。 我知道这些工具确实适用于JavaFx应用程序。但是可以使用它们吗?有什么需要我考虑的吗?

  • 问题内容: 抱歉,我缺乏知识,但我是新手,目前正在学习React。我只是想问一下是否要在我的React应用程序中使用Bootstrap 4,是否必须安装jQuery?我在某处读到,将jQuery与React一起使用是不行的。所以现在我想知道。谢谢回复。您的意见和建议是真正的赞赏。 问题答案: 某些功能(例如下拉菜单,模式)需要JS来操纵DOM,而引导程序则使用jQuery来处理DOM操纵。 但是,

  • 问题内容: 我正在使用BeautifulSoup抓取网址,并且我有以下代码 现在在上面的代码中,我们可以用来获取标签和与其相关的信息,但是我想使用xpath。是否可以将xpath与BeautifulSoup一起使用?如果可能的话,任何人都可以给我提供示例代码,以使其更有帮助吗? 问题答案: 不,BeautifulSoup本身不支持XPath表达式。 另一种库,LXML, 不 支持的XPath 1.

  • 就像在主题中一样,我可以使用Thymeleaf布局方言和spring吗?我必须使用Spring标准方言吗? 网上有这么多的资料,这让我很困惑。 我已经开始使用布局方言,但我无法使用整个应用程序。 这是我的模板主文件: 以及控制器返回的我的示例主体文件: 但不幸的是,这段代码只适用于布局方言。 有人能帮我把代码转换成spring标准方言吗? 我的手机配置: