gpt4 book ai didi

javascript - React 设置一次性路线

转载 作者:行者123 更新时间:2023-12-03 03:11:23 24 4
gpt4 key购买 nike

我有一个应用程序,它对所有路线使用相同的布局......除了一条路线。一条路线将与其他所有路线完全不同。

所以整个应用程序将有菜单、正文、页脚等。一次性路线不会有任何这些,并且是完全独立的东西。

我应该如何在 react 应用程序中设置这种东西?我所见过/做过的所有事情总是有一个主要的包装元素,该元素将路由渲染为子元素。

index.js

import React from 'react'
import ReactDOM from 'react-dom'
import { BrowserRouter } from 'react-router-dom'

import { Provider } from 'react-redux'
import configureStore from './store'

import App from './components/App'
// import registerServiceWorker from './registerServiceWorker'
import { unregister } from './registerServiceWorker'

const preloadedState = window.__PRELOADED_STATE__ ? window.__PRELOADED_STATE__ : {}
// console.log('window.__PRELOADED_STATE__', window.__PRELOADED_STATE__)
delete window.__PRELOADED_STATE__

const Store = configureStore(preloadedState)

const rootEl = document.getElementById('root')

ReactDOM.hydrate(
<Provider store={Store}>
<BrowserRouter>
<App />
</BrowserRouter>
</Provider>,
rootEl
)

if(module.hot){
module.hot.accept('./components/App', () => {
ReactDOM.hydrate(
<Provider store={Store}>
<BrowserRouter>
<App />
</BrowserRouter>
</Provider>,
rootEl
)
})
}

// registerServiceWorker()
unregister()

App.js

import React, { Component } from 'react'
import { withRouter } from 'react-router-dom'
import { connect } from 'react-redux'

// Components
import AppHelmet from './AppHelmet'
import Notices from './Notices'
import Header from './Header'
import Body from './Body'
import Footer from './Footer'

// Site state
import { getSiteInfo } from '../store/actions/siteInfo'
import { REACT_APP_SITE_KEY } from '../shared/vars'

// CSS
import '../css/general.css'

class App extends Component {
initialAction() {
this.props.getSiteInfo(REACT_APP_SITE_KEY)
}

componentWillMount() {
// On client and site info has not been fetched yet
if(this.props.siteInfo.site === undefined){
this.initialAction()
}
}

render() {
return (
<div>
<AppHelmet {...this.props} />
<Notices />
<div className="body">
<Header />
<Body />
</div>
<Footer />
</div>
)
}
}

const mapStateToProps = (state) => {
return {
siteInfo: state.siteInfo,
user: state.user
}
}

const mapDispatchToProps = (dispatch) => {
return {
getSiteInfo: (siteKey) => dispatch(getSiteInfo(siteKey))
}
}

export default withRouter(connect(mapStateToProps, mapDispatchToProps)(App))

Body.js

import React, { Component } from 'react'
import { Switch, Route } from 'react-router-dom'
import routes from '../shared/routes'

class Body extends Component {
render() {
return (
<Switch>
{routes.map((route, i) => <Route key={i} {...route} />)}
</Switch>
)
}
}

export default Body

因此,正如您所看到的,index.js 入口点将呈现 <App /><App />将渲染主布局,包括 <Body /> ,它呈现所有路线和内容。

酷。

但是我不希望这个一次性渲染 <App />布局,我不知道如何从index.js进行设置。我确信这很简单,但我只是没有看到答案。

最佳答案

实现您想要的目的的一种方法是监听路由器。

您可以将监听器添加到您想要隐藏的组件中。

当监听器检测到您所在的 View 中您不希望显示组件时,只需不要为该 View 渲染它们即可。

关于javascript - React 设置一次性路线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46936988/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com