# v0.11:更新说明
## 新特性
- 全新的客户端 Application、Plugin 和 Router
- antd 升级到 v5
- 新插件
- 数据可视化
- API 秘钥
- Google 地图
## 不兼容的变化
### 全新的客户端 Application、Plugin 和 Router
#### 插件的变化
以前必须传递一个组件,并且组件需要透传 `props.children`,例如:
```tsx | pure
const HelloProvider = (props) => {
// do something logic
return
{props.children}
;
}
export default HelloProvider
```
现在需要改为插件的方式,例如:
```diff | pure
+import { Plugin } from '@nocobase/client'
const HelloProvider = (props) => {
// do something logic
return
{props.children}
;
}
+ export class HelloPlugin extends Plugin {
+ async load() {
+ this.app.addProvider(HelloProvider);
+ }
+ }
- export default HelloProvider;
+ export default HelloPlugin;
```
插件的功能很强大,可以在 `load` 阶段做很多事情:
- 修改路由
- 增加 Components
- 增加 Providers
- 增加 Scopes
- 加载其他插件
#### 路由的变化
如果之前使用了 `RouteSwitchContext` 进行路由修改,现在需要通过插件替换:
```tsx | pure
import { RouteSwitchContext } from '@nocobase/client';
const HelloProvider = () => {
const { routes, ...others } = useContext(RouteSwitchContext);
routes[1].routes.unshift({
path: '/hello',
component: Hello,
});
return
{props.children}
}
```
需要改为:
```diff | pure
- import { RouteSwitchContext } from '@nocobase/client';
+ import { Plugin } from '@nocobase/client';
const HelloProvider = (props) => {
- const { routes, ...others } = useContext(RouteSwitchContext);
- routes[1].routes.unshift({
- path: '/hello',
- component: Hello,
- });
return
-
{props.children}
-
}
+ export class HelloPlugin extends Plugin {
+ async load() {
+ this.app.router.add('admin.hello', {
+ path: '/hello',
+ Component: Hello,
+ });
+ this.app.addProvider(HelloProvider);
+ }
+ }
+ export default HelloPlugin;
```
更多文档和示例见 [packages/core/client/src/application/index.md](https://github.com/nocobase/nocobase/blob/main/packages/core/client/src/application/index.md)
### antd 升级到 v5
- antd 相关详情查看官网 [从 v4 到 v5](https://ant.design/docs/react/migration-v5-cn)
- `@formily/antd` 替换为 `@formily/antd-v5`