React Hook 功能组件防止重新渲染

Posted

技术标签:

【中文标题】React Hook 功能组件防止重新渲染【英文标题】:React Hook function Component prevent re-render 【发布时间】:2021-02-14 10:38:59 【问题描述】:

我有一个 Class React 组件,如果浏览器路径名是 /exp,它使用功能性 Hook 组件

当页面加载时,我的应用组件的状态变化大约 3-4 次,

如果道具没有改变,我如何防止示例钩子重新安装?

import React,  useState  from 'react';

 function Example() 
  console.log("i mounted")
  

__

export default class App extends Component 
state=key:"value"   <--------------------------------------MAIN APP STATE CHANGES 3 times
componentDidMount()
//I change App state 3 times with conditional code 


 render() 
    return (
      <Router>
        <Switch>
        <Route path="/exp">
            <Example prop="I have not changed"  />  <-----------------PREVENT MULTIPLE MOUNTINGS
        </Route>
            </Switch>
         </Router>
         )

【问题讨论】:

考虑使用export default React.memo(App) 嗯,App 不是功能组件,我不认为我可以在那里使用 React.memo 【参考方案1】:
const Chat = React.memo(props => 
  console.log("Greeting Comp render");
  return <></>
);

export default Chat   
//This worked for me

您可以使用React.memo 并在道具更改时渲染

function MyComponent(props) 
  /* render using props */


function areEqual(prevProps, nextProps) 
  /*
  return true if passing nextProps to render would return
  the same result as passing prevProps to render,
  otherwise return false
  */

export default React.memo(MyComponent, areEqual);

shouldcomponentupdate 如果是类组件

shouldComponentUpdate(nextProps, nextState)

注意:此方法仅作为性能优化存在。不要依赖它来“阻止”渲染,因为这会导致错误。

【讨论】:

我必须阅读文档,我进行了复制粘贴,但 MyComponent 仍在多次渲染 你可以尝试使用 PureComponent reactjs.org/docs/react-api.html#reactpurecomponent const Chat = React.memo(props => console.log("Greeting Comp render"); return > );导出默认聊天这有效

以上是关于React Hook 功能组件防止重新渲染的主要内容,如果未能解决你的问题,请参考以下文章

React hooks 功能组件防止在状态更新时重新渲染

React 通过使用 useState 的功能变体来防止重新渲染

React 功能组件在重新挂载后停止渲染状态更改

React 功能组件中状态更改后组件未重新渲染

如何防止 react 重新渲染整个组件?

当 React 功能组件重新渲染时,它会重新分配分配的值和功能吗?