【问题标题】:Preventing components to mount on each render with React Router使用 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>

我搜索了互联网,它说渲染方法可以解决问题,但在我的情况下它没有

拉斐尔

【问题讨论】:

    标签: javascript reactjs react-redux react-router react-router-redux


    【解决方案1】:

    使用来自react-router-dom 的Switch 组件。 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,日志显示
    猜你喜欢
    • 2018-11-15
    • 1970-01-01
    • 2017-02-19
    • 2017-11-01
    • 2018-12-02
    • 2018-01-07
    • 1970-01-01
    • 2016-09-17
    • 2023-02-26
    相关资源
    最近更新 更多