--- order: 2 --- # Client-side Kernel To allow more non-developers to participate, NocoBase provides a companion client-side plugin -- a visual configuration interface with no code. The core of this part is @nocobase/client, which ideally can be used within any front-end build tool or framework, e.g. - umijs - create-react-app - icejs - vite - snowpack - nextjs - Other For the time being only support umijs (packaging compilation is still some problems), the future will gradually support the above-listed frameworks. The main components of the client include. ## Request - API Client - Request Hook ```ts const api = new APIClient({ request, }); api.auth(); api.get(); api.post(); api.resource('collections').create(); api.resource('collections').findOne({}); api.resource('collections').findMany({}); api.resource('collections').relationship('fields').of(1).create(); ``` The following details are TBD, special resources ```js api.collections.create(); api.uiSchemas.create(); ``` Request Hook [https://www.npmjs.com/package/@ahooksjs/use-request](https://www.npmjs.com/package/@ahooksjs/use-request) ```js const { data } = useRequest(() => api.resource('users').findMany()); ``` ## Routing - createRouteSwitch ```js const RouteSwitch = createRouteSwitch({ components: {}, }); ``` ## Schema component - createSchemaComponent ```js function Hello() { return
Hello Word
} const SchemaComponent = createSchemaComponent({ scope, components: { Hello }, }); const schema = { type: 'void', 'x-component': 'Hello', }; ``` ## How do you assemble it?
import { I18nextProvider } from 'react-i18next';
import { createRouteSwitch, APIClient } from '@nocobase/client';

const apiClient = new APIClient();
const i18n = i18next.createInstance();

const Hello = () => {
  return 
Hello
; } const SchemaComponent = createSchemaComponent({ components: { Hello, }, }); const PageTemplate = () => { const schema = { type: 'void', 'x-component': 'Hello', }; return ( ); } const RouteSwitch = createRouteSwitch({ components: { PageTemplate, }, }); const routes = [ { path: '/hello', component: 'Hello' }, ]; function AntdProvider(props) { // The locale here can be handled dynamically depending on the i18next return ( {props.children} ); } const App = () => { return ( ); }
- APIClientProvider: provides the APIClient - I18nextProvider: internationalization - AntdProvider: handles the internationalization of antd components, which needs to be placed in I18nextProvider - Router: route driver - RouteSwitch: route distribution The above code may seem a bit verbose, but the actual function and role of each part is not the same, so it is not suitable for over-encapsulation. If needed, it can be further encapsulated according to the actual situation.