React+antd 使用了dark主题没效果

文章讲述了在Vite+React+antd环境中启用dark主题时遇到的问题,发现Form组件未应用全局样式,通过添加Layout并设置固定高度解决了主题在Form组件外的部分不生效的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用了vite+React+antd 环境下,使用了dark主题没效果

这是我的框架结构
在这里插入图片描述
很简单一个案例

# main.jsx
import React from 'react'
import ReactDOM from 'react-dom/client'
import { App, ConfigProvider, theme } from 'antd'

import './index.css'
import MyApp from './App2.jsx'

ReactDOM.createRoot(document.getElementById('root')).render(
  <ConfigProvider 
    theme={{
      algorithm: theme.darkAlgorithm, # 使用算法 来设定暗黑
    }
  }>
      <App>
        <React.StrictMode>
          <MyApp />
        </React.StrictMode>,
      </App>
  </ConfigProvider>
)

App.jsx

import { Form, Input, Typography } from 'antd'
import React from 'react'

const App = () => {
  return (
    <>
        <Form>
            <Input.Search placeholder='请输入用户名' size={'large'} style={{width:300}} />
            <Typography.Paragraph>
              这是一段文字<br/>
              <Typography.Text mark> 标记性文字</Typography.Text>
            </Typography.Paragraph>
        </Form>
    </>
  )
}

export default App

然后运行看到的效果是这样
在这里插入图片描述

这是由于Form不是布局格式的组件,无法应用到整个屏幕,添加layout 布局即可

import { Form, Input, Layout, Typography } from 'antd'
import React from 'react'

const App = () => {
  return (
    <>
      <Layout style={{height:'100vh'}}> # 这里添加了高度,默认是按照内容高度来显示,高度以外的就不在是暗黑主题了
        <Form>
            <Input.Search placeholder='请输入用户名' size={'large'} style={{width:300}} />
            <Typography.Paragraph>
              这是一段文字<br/>
              <Typography.Text mark> 标记性文字</Typography.Text>
            </Typography.Paragraph>
        </Form>
      </Layout>
    </>
  )
}

export default App

看效果

在这里插入图片描述

### 使用 Ant Design 和 React 实现路由跳转 #### 安装依赖库 为了能够顺利使用 `Ant Design` 组件以及实现页面之间的路由跳转,需要安装必要的 npm 包。这通常涉及到安装 `ant-design` 和 `react-router-dom`。 ```bash npm install antd react-router-dom ``` #### 创建基本应用结构 创建一个基础的应用框架来承载不同页面的内容展示逻辑。这里会有一个用于显示主页和其他子页的布局[^1]。 #### 配置路由 通过引入 `BrowserRouter`, `Route`, `Routes` 来配置应用程序中的路径映射关系,并利用 `Link` 或者编程方式完成页面间的导航操作[^2]。 ```jsx import React from 'react'; import { BrowserRouter as Router, Routes, Route, Link } from 'react-router-dom'; import { Layout, Menu } from 'antd'; const { Header, Content, Footer } = Layout; function App() { return ( <Router> <Layout className="layout"> <Header> <div className="logo" /> <Menu theme="dark" mode="horizontal" defaultSelectedKeys={['2']}> <Menu.Item key="1"><Link to="/">Home</Link></Menu.Item> <Menu.Item key="2"><Link to="/about">About</Link></Menu.Item> </Menu> </Header> <Content style={{ padding: '0 50px' }}> <Routes> <Route path="/" element={<Home />} /> <Route path="/about" element={<About />} /> </Routes> </Content> <Footer style={{ textAlign: 'center' }}>Ant Design ©2023 Created by Ant UED</Footer> </Layout> </Router> ); } export default App; ``` #### 页面组件定义 对于每一个具体的页面视图,则单独编写对应的 React 组件文件来进行封装处理。比如下面的例子展示了两个简单的页面组件 Home 和 About 的定义方法[^4]。 ```jsx // components/Home.js import React from 'react'; function Home() { return ( <h1>Home Page</h1> ) } export default Home; // components/About.js import React from 'react'; function About() { return ( <h1>About Us</h1> ) } export default About; ``` #### 编程式导航 除了上述声明式的链接外,还可以采用编程的方式触发页面转换动作。例如,在某个按钮点击事件处理器内部调用 `useNavigate()` Hook 函数即可轻松达成目的。 ```jsx import React from 'react'; import { useNavigate } from 'react-router-dom'; function GoToPageButton({ destination }) { const navigate = useNavigate(); function handleClick() { navigate(destination); } return ( <button onClick={handleClick}>Go To {destination}</button> ); } export default GoToPageButton; ``` #### 处理懒加载与 Suspense 当项目规模逐渐增大时,考虑性能优化就变得尤为重要。此时可以借助于 React 提供的动态导入特性配合 `<Suspense>` 组件一起工作,从而达到按需加载的效果,减少初次渲染时间内的资源消耗[^5]。 ```jsx import React, { lazy, Suspense } from 'react'; import { BrowserRouter as Router, Routes, Route } from 'react-router-dom'; const HomeLazy = lazy(() => import('./components/Home')); const AboutLazy = lazy(() => import('./components/About')); function AppWithLazyLoading() { return ( <Router> <Suspense fallback={<div>Loading...</div>}> <Routes> <Route path="/" element={<HomeLazy />} /> <Route path="/about" element={<AboutLazy />} /> </Routes> </Suspense> </Router> ); } export default AppWithLazyLoading; ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值