我正在使用 react-router v4 并且在嵌套路由方面遇到了一些麻烦。我的父路由是一个产品详细信息页面,它使用 componentDidMount() 中的 AJAX 请求来设置产品数据。
但是,当我单击链接以呈现嵌套在详细信息页面中的路由时,父路由会重新呈现并且 AJAX 会再次请求吗?
这是一些快速示例代码:
const App = () => (
<Router>
<Switch>
<Route path="/login" component={LoginPage} />
<Route path="/admin" component={AdminPage} />
</Switch>
</Router>
)
const AdminPage = ({match}) => (
<Switch>
<Route exact path={match.path} component={Home} />
<Route path={`${match.path}/products/:id`} component={ProductDetails} />
<Route path={`${match.path}/products`} component={ProductList} />
</Switch>
)
class ProductDetails extends React.Component {
constructor(){
super();
this.state = {
name: '',
price: ''
};
}
componentDidMount(){
API.getProductDetails((response) => {
this.setState({
name: response.name,
price: response.price
});
})
}
render(){
return(
<div>
<h1>{this.state.name}</h1>
<p>{this.state.price}</p>
<ul>
<li><Link to={`${this.props.match.url}/stats}>Stats</Link></li>
<li><Link to={`${this.props.match.url}/bids}>Bids</Link></li>
<li><Link to={`${this.props.match.url}/third}>Third</Link></li>
</ul>
<Switch>
<Route path={`${this.props.match.path}/stats} component={Stats} />
<Route path={`${this.props.match.path}/bids} component={Bids} />
<Route path={`${this.props.match.path}/third} component={Third} />
</Switch>
</div>
);
}
}
那么,当我打开嵌套在其中的路由之一时,如何防止父组件 (ProductDetails) 重新渲染?感谢您的任何帮助!