reactjs - 每次父级重新渲染时都会调用 React 渲染方法

标签 reactjs

我有一个 react 组件,我注意到每次所有者组件渲染时都会重新渲染,即使传递的 Prop 没有改变。

这是正常行为吗?我认为只有当所有者发送新的 Prop 时,组件才会重新渲染,即 Prop 更改为具有不同的值或某些内部状态更改。

假设上述情况成立,是否有任何技巧可以调试导致组件重新渲染的更改?

最佳答案

React 的重点是在实际 DOM 之上使用虚拟 DOM。 React 组件中的 render() 方法用于计算新的 VD,将其与之前的进行比较,并将 diff 应用于 AD。之间存在差异,例如React.DOM.div 和你的组件在另一个组件的 render() 方法中 - React 需要计算你的组件的 VD - 显然,因为它是 render( ) 方法 - 即使没有传递任何 props。

但是,您可以使用 shouldComponentUpdate() 钩子(Hook)明确告诉 React 组件它是否调用它的 render() 方法。在 React.createClass() 表示法中,您可以使用 PureRenderMixin,除了下一个代码注入(inject)之外什么也没有:

import shallowEqual from 'react/lib/shallowEqual';

shouldComponentUpdate(nextProps, nextState) {
    return !shallowEqual(nextProps, this.props) || !shallowEqual(nextState, this.state);
}

有一些方法可以用 ES6 表示法来做到这一点 - 例如从 PureRenderComponent 继承,包含上述钩子(Hook)。

另请参阅https://facebook.github.io/react/docs/advanced-performance.html

关于reactjs - 每次父级重新渲染时都会调用 React 渲染方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32462937/

相关文章:

javascript - React.createContext点defaultValue?

javascript - 在有滚动条的侧边栏外显示下拉菜单,但仍与 anchor 处于相同位置

reactjs - react 还原: Cannot set on an immutable record

javascript - 如何获取正在运行 React 应用程序的当前域名

reactjs - React-scripts 无法在 azure 部署上运行 npm run build

javascript - 函数调用前的@是什么意思?

javascript - React-JS 将 CSS-in-JS 转换为 CSS 字符串

javascript - 购物车未在 React.js 中添加正确的项目

javascript - react -在单独的组件中调用Axios时setState不重新呈现页面

javascript - glimmerjs 中的 react 上下文是什么?