reactjs 仅在针对特定路线时应用CSS

hfwmuf9z  于 2022-12-03  发布在  React
关注(0)|答案(4)|浏览(84)

如何仅在提供特定路由时应用CSS规则?

import React from 'react'
import ReactDOM from 'react-dom'
import registerServiceWorker from './registerServiceWorker'
import './styles/index.css'
import {
  Route, Switch, BrowserRouter as Router
} from 'react-router-dom'
import App from './components/App'
import Life from './components/Life'

ReactDOM.render(
    <Router>
        <Switch>
            <Route exact path="/life" component={Life} />
            <Route path="/" component={App} />
        </Switch>
    </Router>
    , document.getElementById('root'));
registerServiceWorker();

./styles/index.css中,我有一些body的规则,例如,我想只在路由'/life'被服务时才覆盖这些规则。我如何实现这一点?

ajsxfq5m

ajsxfq5m1#

因此,显然你可以在React组件内部使用require(),这意味着你可以在函数/类内部,或者在import语句下的组件外部直接执行类似的操作:

if (window?.location.pathname === '/life')
    require('./styles/index.css')

我不知道一个人是否应该这样做,这似乎是非法的,但它的工作。

irlmq6kh

irlmq6kh2#

您可以在需要时根据当前路由添加特定的css类:
第一个
编辑:根据评论问题
您可以为应用程序组件指定监听程序,例如:

componentDidMount() {
    this.context.router.getLocation().addChangeListener(listener);
}
componentWillUnmount() {
    this.context.router.getLocation().removeChangeListener(listener);
}

或每个路由处理器:

function handler() {
  do something;
}

<Route path='/' component={App}>
  <Route path="foo" component={Foo} onEnter={handler}/>
  <Route path="life" component={Life} onEnter={handler}/>
</Route>
zz2j4svz

zz2j4svz3#

下面是一个例子,我如何使用它来添加特定路径的内联样式

import { useLocation } from 'react-router';
    
const location = useLocation();
    
<nav style={location.pathname === '/' ? { position: 'absolute' } : null}>

或者你可以这样做:

const style = {
    position: 'absolute',
    marginTop: '20px',
    background: `${(props) => (props.primary ? 'palevioletred' : 'white')}`,
  };
<nav style={location.pathname === '/' ? style  : null}>
ih99xse1

ih99xse14#

您可以在index.html文件中添加setInterval script 标记。
就像这样:

setInterval(()=> {
if(location == '/'){
..function
}
else if(location == '/about'){
..function
}
}, 1)

相关问题