将插件从 Grafana 9.x 版本迁移到 10.x 版本
请按照以下说明将插件从 Grafana 9.x 版本迁移到 10.x 版本。
使用 React 18 验证插件行为
Grafana 10 包含我们对 React 18 的升级以及新 React 客户端渲染 API 的使用。这些更改已通过 PR 64428 提供给核心 grafana
存储库。
尽管这些更新带来了许多显著优势,但它们有可能影响插件的工作方式。特别是,围绕提高 useEffect
定时和状态更新自动批处理的更改可能会导致意外的副作用。
建议的操作
- 查看 React 18 升级文档。
- 针对最新的 grafana-dev Docker 镜像(例如,此镜像)测试您的插件。
- 如果您的插件受到影响,请在 论坛讨论 中添加评论。请务必与我们沟通,以便我们了解问题并提供帮助。
数据帧字段值现在只是数组
在 Grafana 10 中,数据帧中的值现在作为简单的 JavaScript 数组进行管理(请参阅 PR #66480)。不再需要将值包装在 Vector<T>
实现中。c
大多数针对 9.x 的代码将继续工作而没有任何问题。例外情况是现有代码直接实现 Vector<T>
而不是扩展或使用基类的情况。在这种情况下,代码应返回数组或扩展 FunctionalVector<T>
。所有 Vector 实现均已弃用,将在未来删除。
在编写应在 9.x 上运行的插件时,请继续使用 Vector 接口。在这种情况下,当针对 10+ 版本时,您现在可以使用简单的数组而不是包装类。
为了使此转换无缝进行,我们使用了原始的 JavaScript Sin™。也就是说,我们 使用几个 Vector 方法扩展了本机 Array 原型。
更新到 React Router v6
从 Grafana 10 开始,插件可以开始使用 v6 版的 react-router
。总的来说,react-router
v6 旨在简化路由配置,并为开发人员提供更灵活和直观的 API。
如果当前插件版本需要与 Grafana v9 保持兼容性,则可以在 Grafana v10 中继续使用 react-router@v5
。两个版本都可用于插件。但是,**我们强烈建议开发人员尽快更新其插件以使用 v6 版本的 react-router
**,因为 v5 版本将在 Grafana v11 中弃用,随后将被删除。
有关更一般的信息,请参阅 官方 React Router v5 到 v6 的迁移指南。
使用 @grafana/create-plugin
更新
请按照以下步骤开始在插件中使用 react-router
v6
1. 更新与构建相关的配置:
通过在 <project-root>/.cprc.json
中设置以下功能标志来启用使用 react-router@v6
{
"features": {
"useReactRouterV6": true
}
}
现在使用 create-plugin 工具更新构建配置
- npm
- pnpm
- yarn
npx @grafana/create-plugin@latest update
pnpm dlx @grafana/create-plugin@latest update
yarn create @grafana/plugin update
更新构建配置后,您可能需要对插件进行其他更新。为此,请按照以下步骤操作
2. 使用 <Routes>
代替 <Switch>
// Using <Routes> instead of <Switch> in `react-router` v6
import { Routes } from 'react-router-dom';
// ...
return (
<Routes>
<Route path="/" element={<Home />} />
</Routes>
);
3. 从 <Route>
组件中删除 exact
属性
return (
<Routes>
{/* BAD (Until v5) */}
<Route exact path="/" element={<Home />} />
{/* GOOD (From v6) */}
{/* (Routes are "exact" by default, you need to use the "*" to match sub-routes) */}
<Route path="/" element={<Home />} />
</Routes>
);
4. 按照原始 react-router
迁移指南了解更深入的更改
访问 官方 react-router v5 到 v6 的迁移指南 以获取更多信息。