使用 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-domSwitch 组件。 documentation 说:

这与只使用一堆Routes 有何不同? 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)

React Router简单Demo

React-router路由3.x版本用法

如何在使用react-router路由的组件中集成错误边界

是否可以仅在 react-router 转换时仅重新安装新的子组件

React-router 多路由(React 组件)