React module of JSON Forms
npm install boyc-jsonforms-reactJsonForms component to render a form for your data.
data: any - the data to show
renderers: JsonFormsRendererRegistryEntry[] - the React renderer set to use
schema: JsonSchema - the data schema for the given data. Will be generated when not given.
uischema: UISchemaElement - the UI schema for the given data schema. Will be generated when not given.
cells: JsonFormsCellRendererRegistryEntry[] - the React cell renderer set to use
config: any - form-wide options. May contain default ui schema options.
readonly: boolean - whether all controls shall be readonly.
uischemas: JsonFormsUiSchemaEntry[] - registry for dynamic ui schema dispatching
validationMode: 'ValidateAndShow' | 'ValidateAndHide' | 'NoValidation' - the validation mode for the form
ajv: AJV - custom Ajv instance for the form
middleware: Middleware - can be used to hook into the form-wide data management.
i18n: JsonFormsI18nState - can be used to internationalize the rendered form.
onChange - callback which is called initially and on each data change, containing the updated data and the validation result.
ts
import React, { useState } from 'react';
import {
materialRenderers,
materialCells,
} from 'boyc-jsonforms-material-renderers';
import { JsonForms } from 'boyc-jsonforms-react';
const schema = {
type: 'object',
properties: {
name: {
type: 'string',
minLength: 1,
},
done: {
type: 'boolean',
},
due_date: {
type: 'string',
format: 'date',
},
recurrence: {
type: 'string',
enum: ['Never', 'Daily', 'Weekly', 'Monthly'],
},
},
required: ['name', 'due_date'],
};
const uischema = {
type: 'VerticalLayout',
elements: [
{
type: 'Control',
label: false,
scope: '#/properties/done',
},
{
type: 'Control',
scope: '#/properties/name',
},
{
type: 'HorizontalLayout',
elements: [
{
type: 'Control',
scope: '#/properties/due_date',
},
{
type: 'Control',
scope: '#/properties/recurrence',
},
],
},
],
};
const initialData = {};
function App() {
const [data, setData] = useState(initialData);
return (
schema={schema}
uischema={uischema}
data={data}
renderers={materialRenderers}
cells={materialCells}
onChange={({ data, _errors }) => setData(data)}
/>
);
}
export default App;
``