使用 React Router 防止组件安装在每个渲染上
Posted
技术标签:
【中文标题】使用 React Router 防止组件安装在每个渲染上【英文标题】:Preventing components to mount on each render with React Router 【发布时间】:2021-05-28 05:20:08 【问题描述】:我想防止每个组件在每次渲染时都挂载,我正在使用 React Router,
我将使用component=ComponentName
加载它们更改为render() => < ComponentName />
,但没有成功。
这似乎是自然的行为,但我想一定有办法改变它
这是我的 App.js
export default function App()
return (
<div className = "App" >
<Provider store=store>
<Route path="/" render=() => <Header /> />
<Route exact path="/" render=() => <ShowSplashWindow /> />
<Route path="/countries" render=() => <Countries /> />
<Route path="/createactivity" render=() => <CreateActivity /> />
</Provider>
</div>
);
这是我的路线路径:
<nav className=style.nav>
<Link to="/" className=style.subNav>
<p>Init</p>
</Link>
<Link to="/countries" className=style.subNav>
<p>Countries</p>
</Link>
<Link to="/createactivity" className=style.subNav>
<p>Create Activities</p>
</Link>
</nav>
我搜索了互联网,它说渲染方法可以解决问题,但在我的情况下它没有
拉斐尔
【问题讨论】:
【参考方案1】:使用来自react-router-dom
的Switch
组件。 documentation 说:
这与只使用一堆
Route
s 有何不同?Switch
的独特之处在于它专门呈现一条路线。相比之下,与该位置匹配的每个Route
都会以包容性方式呈现。
export default function App()
return (
<div className = "App" >
<Provider store=store>
<Route path="/" render=() => <Header /> />
<Switch>
<Route exact path="/" render=() => <ShowSplashWindow /> />
<Route path="/countries" render=() => <Countries /> />
<Route path="/createactivity" render=() => <CreateActivity /> />
</Switch>
</Provider>
</div>
);
【讨论】:
我对其进行了测试,但没有成功,我在其中一个组件 Country 中放置了一个 console.log('I'm here'),它在每次渲染时都会显示,比如说,我去了到 /createactivity,然后回到 /countries,日志显示以上是关于使用 React Router 防止组件安装在每个渲染上的主要内容,如果未能解决你的问题,请参考以下文章
React-native 组件缓存(或防止卸载)(react-navigation)