在使用连接的react-router时防止react页面重新渲染可以通过以下方法实现:
import React from 'react';
import { BrowserRouter as Router, Route, Link } from 'react-router-dom';
const Home = React.memo(() => {
return <h1>Home</h1>;
});
const About = React.memo(() => {
return <h1>About</h1>;
});
const App = () => {
return (
<Router>
<ul>
<li>
<Link to="/">Home</Link>
</li>
<li>
<Link to="/about">About</Link>
</li>
</ul>
<Route path="/" exact component={Home} />
<Route path="/about" exact component={About} />
</Router>
);
};
export default App;
在上面的例子中,由于Home和About组件都使用了React.memo()进行了包装,只有当路由切换到对应的组件时,该组件才会重新渲染。
import React, { useCallback } from 'react';
import { BrowserRouter as Router, Route, Link } from 'react-router-dom';
const Home = () => {
const handleClick = useCallback(() => {
console.log('Home clicked');
}, []);
return (
<div>
<h1>Home</h1>
<button onClick={handleClick}>Click me</button>
</div>
);
};
const About = () => {
const handleClick = useCallback(() => {
console.log('About clicked');
}, []);
return (
<div>
<h1>About</h1>
<button onClick={handleClick}>Click me</button>
</div>
);
};
const App = () => {
return (
<Router>
<ul>
<li>
<Link to="/">Home</Link>
</li>
<li>
<Link to="/about">About</Link>
</li>
</ul>
<Route path="/" exact component={Home} />
<Route path="/about" exact component={About} />
</Router>
);
};
export default App;
在上面的例子中,由于handleClick函数使用了useCallback()进行了包装,并传入一个空依赖数组作为参数,所以每次渲染时都会使用相同的函数引用,避免了不必要的重新渲染。
这是在使用连接的react-router时防止react页面重新渲染的两种常用方法,可以根据实际需求选择适合的方式来优化性能。
领取专属 10元无门槛券
手把手带您无忧上云