我可以避免在路由更改时重新渲染父路由处理程序组件吗?

Can I avoid re-rendering parent route handler component when the route changes?

我是 react / redux 的新手,我希望按照这 3 条规则创建模态视图:

url 依赖的原因是它没有优化,它是重新渲染父级。

示例:我在“/namespaces”处有一个名称空间视图,它打印所有名称空间,当我打开“/namespaces/edit”时,它打开模态视图名称空间正在重新渲染。如何不重新呈现命名空间列表?

路由器下方

<Route path="namespaces" component={NamespaceList}>
   <Route path="edit" component={NamespaceEdit}/>
   <Route path="create" component={NamespaceCreate}/>
</Route>

命名空间列表组件

function NamespacesList({ push, children }) {
  console.log("rendered !")
  return (
    <div>
      NamespacesList
      <p>
        <Link to="/namespaces/create">Create</Link>
        <br />
        <Link to="/namespaces/edit">Edit</Link>
      </p>
      {children}
    </div>
  )
}

NamespacesCreate 组件(打印在模式内部)

const NamespacesCreate = function() {
  return (
    <Modal>
      NamespacesCreate
      <p>
        <Link to="/namespaces">Back to namespaces list ?</Link>
      </p>
    </Modal>
  )
}

用例: 我在 /templates/create 上(命名空间列表在模式的后面绘制,在控制台中打印 rendered ! 然后当我单击 link 返回到父 url /templates,又打印了rendered !

所以有一种方法可以 "optimize" 它而不是重新呈现 namespaceList 或者我需要在两者之间做出选择,或者我错了吗?

不用担心组件的render()方法被调用了多少次。渲染在 React 中 非常 便宜,如果内容没有改变,它实际上不会触及 DOM.

只有当您的应用程序开始遇到真正的性能问题时,您才应该开始担心 render() 方法调用,这对于导航等一次性问题来说不太可能。例如,您可能想要优化具有大量输入的动画或表单组件。

如果 你有这个问题(不是更早!),你可以查看 Advanced Performance optimizations, measuring wasted renders with ReactPerf, and learn about common performance anti-patterns.

的 React 指南

不要让这无缘无故地使您的代码复杂化。只有当你遇到真正的问题时才进行优化,而且不要太早。 React 对于大多数用户开箱即用的需求来说非常快,render() 方法被经常调用是非常好的。