Overview
Akiform is a high-level form management framework designed for React applications, providing an abstraction layer over React Hook Form. It integrates schema-based validation using Akival and offers seamless interoperability with UI component libraries.
Core Components
-
Form State Management: Utilizing React Hook Form for optimized form state handling, Akiform manages user inputs, validation, and submissions efficiently.
-
Schema Validation Integration: Incorporating Akival for declarative schema definition and validation, Akiform allows complex validation rules to be expressed clearly.
-
UI Layer Interoperability: Akiform’s adaptors (
AkiformandFormItem) facilitate integration with various UI frameworks, ensuring flexibility and adaptability.
Architectural Highlights
-
Declarative API: Akiform’s API aligns with React’s philosophy, promoting readability and maintainability.
-
Abstraction and Encapsulation: Simplifying the interface, Akiform abstracts the complexities of form state management and validation logic.
-
Performance Optimization: Focused on performance, Akiform minimizes re-rendering, leveraging React Hook Form’s rendering optimizations.
-
Scalability and Extensibility: Akiform’s modular design supports scalability and customization to meet specific requirements.
System Interaction and Data Flow
-
Form Initialization: Akiform sets up with default values and a validation schema, organizing the form’s state management and validation.
-
User Interaction: User inputs are captured and the form state is updated accordingly.
-
Validation Process: Continuous validation against the Akival schema provides real-time feedback and error management.
-
Form Submission: On submission, Akiform performs a final validation, processes data, and handles submission logic.
Examples
For more information and examples, you visit React Hook Form website .
Basic Form Example
import { useForm, akivalResolver, Akiform, FormItem } from '@akinon/akiform';
import * as akival from '@akinon/akival';
const schema = akival.object().shape({
name: akival.string().required(),
surname: akival.string().required()
});
export default function App() {
const { control, handleSubmit } = useForm({
resolver: akivalResolver(schema),
defaultValues: {
name: '...',
surname: '...'
}
});
const onSubmit = values => {};
const onErrors = errors => {};
return (
<Akiform onFinish={handleSubmit(onSubmit, onErrors)}>
<FormItem control={control} name="name" label="Name">
<input />
</FormItem>
<FormItem control={control} name="surname" label="Surname">
<input />
</FormItem>
<input type="submit" />
</Akiform>
);
}Advanced Form Example
For more complex forms, Akiform supports integration with UI libraries like
@akinon/ui-react.
import { Button, Input } from '@akinon/ui-react';
import { useForm, akivalResolver, Akiform, FormItem } from '@akinon/akiform';
import * as akival from '@akinon/akival';
const schema = akival.object().shape({
username: akival.string().required().min(4).max(10),
password: akival.string().required()
});
const App = () => {
const { control, handleSubmit } = useForm({
resolver: akivalResolver(schema),
defaultValues: {
username: 'john',
password: '123456'
}
});
const onSubmit = values => {};
const onErrors = errors => {};
return (
<Akiform onFinish={handleSubmit(onSubmit, onErrors)}>
<FormItem control={control} name="username" label="Username">
<Input />
</FormItem>
<FormItem control={control} name="password" label="Password">
<Input.Password />
</FormItem>
<Form.Item>
<Button type="primary" htmlType="submit">
Submit
</Button>
</Form.Item>
</Akiform>
);
};
export default App;You can learn about form validation with the Akival library here.