# v0.11: Update instructions
## Plugin registration and use
before you had to pass a component and the component needed to pass `props.children`, for example:
```tsx | pure
const HelloProvider = (props) => {
// do something logic
return
{props.children}
;
}
export default HelloProvider
```
now you need to change to the plugin way, for example:
```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;
```
plugins are very powerful and can do a lot of things in the `load` phase:
- modify routes
- add Components
- add Providers
- add Scopes
- load other plugins
if you used `RouteSwitchContext` to modify the route before, you now need to replace it with a plugin:
```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}
}
```
now you need to change to the plugin way, for example:
```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;
```
more details can be found in [plugin development](/development/client).