修复vite中使用react提示Fast refresh only works when a file only exports components.

server/2024/12/22 19:40:09/

前言

我通过 vite 构建了一个 react 应用并使用 react.lazy 来懒加载组件,但是在使用过程中 一直提示 Fast refresh only works when a file only exports components. Move your component(s) to a separate file.eslint(react-refresh/only-export-components)。这里简单的记录下问题的修复方式。

复现方式

先定义一组路由并导出

// src/router/index.jsx
import { lazy } from "react"
import { Navigate } from "react-router-dom"const Home = lazy(() => import("../views/home"))const routes = [{ path: "/", element: <Navigate to="/home" /> },{ path: "/home", element: <Home /> },
]
export default router

main.jsx中使用简洁的 URL <BrowserRouter> 将当前位置存储在浏览器地址栏中,并使用浏览器内置的历史堆栈进行导航。

// src/main.jsx
import ReactDOM from 'react-dom/client'
import App from './App.jsx'
import { BrowserRouter } from "react-router-dom"ReactDOM.createRoot(document.getElementById('root')).render(<BrowserRouter><App /></BrowserRouter>
)

App.jsx 使用钩子函数 useRoutes 的返回一个有效的 React 元素来呈现路由树。

// src/App.jsx
import { useRoutes } from "react-router-dom"
import routes from './router/index'function App() {return (<><div className="page">{ useRoutes(routes) }</div></>)
}
export default App

但是在 router/index.jsx 中一直会提示如下错误:

在这里插入图片描述

解决措施

这里有两种解决方案:

  • 为所有文件的此规则添加禁用注释。这实际上不会打破快速刷新。

  • 导出呈现路由器提供程序的组件,而不是导出路由器。

在不修改原有配置的基础上我们推荐使用第二种方式进行修改,而且也是副作用最小的方式。

1、在 router\index.jsx 文件中使用 createBrowserRouter 这个 React Router Web 项目推荐使用的路由并使用 RouterProvider 导出路由。修改代码如下:

import { lazy } from "react"
import { Navigate, createBrowserRouter, RouterProvider } from "react-router-dom"const Home = lazy(() => import("../views/home"))const routes = [{ path: "/", element: <Navigate to="/home" /> },{ path: "/home", element: <Home /> },
]const router = createBrowserRouter(routes)const Routes = () => {return <RouterProvider router={router} />
}
export default Routes

2、在 main.jsx 中直接渲染 App 组件即可

import ReactDOM from 'react-dom/client'
import App from './App.jsx'ReactDOM.createRoot(document.getElementById('root')).render(<App />)

3、在 App.jsx 中直接使用 router\index.jsx 中导出的函数式组件,修改代码如下:

import Routes from "./router";function App() {return (<><div className="page"><Routes></Routes></div></>)
}
export default App

参考链接:Lazy Loading react component get some warning


http://www.ppmy.cn/server/6533.html

相关文章

Python 数据结构和算法实用指南(四)

原文&#xff1a;zh.annas-archive.org/md5/66ae3d5970b9b38c5ad770b42fec806d 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第十二章&#xff1a;字符串算法和技术 根据所解决的问题&#xff0c;有许多流行的字符串处理算法。然而&#xff0c;最重要、最流行和最有…

搭建Zookeeper完全分布式集群(CentOS 9 )

ZooKeeper是一个开源的分布式协调服务&#xff0c;它为分布式应用提供了高效且可靠的分布式协调服务&#xff0c;并且是分布式应用保证数据一致性的解决方案。该项目由雅虎公司创建&#xff0c;是Google Chubby的开源实现。 分布式应用可以基于ZooKeeper实现诸如数据发布/订阅…

Linux Supervisor进程控制系统完全教程

一、简介 Supervisor是一个进程控制系统&#xff0c;它使用户能够监视和控制类unix操作系统进程。它通过提供基于配置或事件启动、停止和重新启动进程的机制&#xff0c;帮助管理应该在系统中连续运行的进程。对于需要控制和监视Linux或其他类unix操作系统上多个进程的状态的开…

Redis中的Lua脚本(六)

Lua脚本 清空repl_scriptcache_dict字典 每当主服务器添加一个新的从服务器时&#xff0c;主服务器都会清空自己的repl_scriptcache_dict字典&#xff0c;这是因为随着新从服务器的出现&#xff0c;repl_scriptcache_字典里面记录的脚本已经不再被所有从服务器载入过&#xf…

FPGA - ZYNQ 基于EMIO的PS和PL交互

前言&#xff1a; Xilinx ZYNQ系列的芯片&#xff0c;GPIO分为 MIO 、EMIO、AXI_GPIO三种方式。 MIO &#xff1a;固定管脚&#xff0c;属于PS端&#xff0c;也就是ARM端。 EMIO &#xff1a;通过PL扩展&#xff0c;使用时需要分配PL(FPGA)管脚&#xff0c;消耗PL端资源。…

Linux 引导过程与服务控制

Linux操作系统引导过程 完整启动过程 简化紧要关键步骤&#xff08;重点&#xff09; Linux系统开机引导过程&#xff1a; 1&#xff09;开机自检 检测硬件设备&#xff0c;找到能够引导系统的设备&#xff0c;比如硬盘 2&#xff09;MBR引导 运行MBR扇区里的主…

适合各大资源网投稿html源码

源码介绍 适合各大资源网投稿html源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面&#xff0c;重定向这个界面 效果预览 源码下载 适合各大资源…

链表中LinkList L与LinkList *L( * L.elem L->elem)

摘要 LinkList L&#xff1a;L是结构体指针&#xff0c;使用“->“运算符来访问结构体成员&#xff1b;&#xff08;*L&#xff09;是结构体&#xff0c;使用"."运算符访问结构体成员 函数是否有&看是否要返回该链表等&#xff0c;若返回加&&#xff0c…