ReferenceInput
** Last Built**: September 2, 2025 at 4:19 PM A form input component for handling references to other resources. This component allows users to select values from a referenced resource, supporting both single and multiple selections with optional search functionality.
Basic Usage
import { ReferenceInput } from 'react-superadmin';
function MyForm() {
const [author, setAuthor] = useState(null);
return (
<ReferenceInput
name='author'
label='Author'
reference='authors'
optionText='name'
optionValue='id'
value={author}
onChange={setAuthor}
dataProvider={myDataProvider}
/>
);
}
Props
| Prop | Type | Default | Description |
| ------------------------------------------------- |
| name | string | - | The name of the field |
| label | string | - | The label to display |
| reference | string | - | The resource to reference |
| optionText | string | "name" | The field to display from the referenced resource |
| optionValue | string | "id" | The field to use as the value |
| multiple | boolean | false | Whether to allow multiple selections |
| required | boolean | false | Whether the field is required |
| disabled | boolean | false | Whether the field is disabled |
| hidden | boolean | false | Whether to show the field |
| value | any | - | The current value |
| onChange | (value: any) => void | - | Callback when the value changes |
| placeholder | string | - | The placeholder text |
| searchable | boolean | true | Whether to show a search input |
| autocomplete | boolean | false | Whether to use autocomplete mode |
| dataProvider | (resource: string, params: any) => Promise<any> | - | The data provider function |
| filter | any | - | The filter to apply to the reference data |
| sort | any | - | The sort to apply to the reference data |
| pagination | any | - | The pagination to apply to the reference data |
| size | "sm" \| "md" \| "lg" | "md" | The size variant |
| errors | string[] | [] | The validation errors |
| touched | boolean | false | The touched state |
| showValidationErrors | boolean | true | Whether to show validation errors |
Examples
Single Selection
Multiple Selection
Autocomplete Mode
With Validation
Category is required
With Custom Filtering
Data Provider Integration
The ReferenceInput component integrates with data providers to fetch reference data. The data provider should implement the getList method:
const dataProvider = async (resource, method, params) => {
if (method === 'getList') {
// Fetch data from your API
const response = await fetch(`/api/${resource}`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(params),
});
const data = await response.json();
return {
data: data.items,
total: data.total,
};
}
};
Customization
Styling
You can customize the appearance using CSS classes:
<ReferenceInput
name='author'
label='Author'
reference='authors'
className='custom-reference'
labelClassName='custom-label'
inputClassName='custom-input'
errorClassName='custom-error'
helperClassName='custom-helper'
dataProvider={myDataProvider}
/>
Size Variants
The component supports three size variants:
// Small
<ReferenceInput size="sm" {...props} />
// Medium (default)
<ReferenceInput size="md" {...props} />
// Large
<ReferenceInput size="lg" {...props} />
Accessibility
The ReferenceInput component includes comprehensive accessibility features:
- Proper ARIA labels and descriptions
- Keyboard navigation support
- Screen reader compatibility
- Focus management
- Error announcement
Integration with Forms
The ReferenceInput component integrates seamlessly with form libraries like React Hook Form:
import { useForm } from 'react-hook-form';
function MyForm() {
const { register, handleSubmit, setValue, watch } = useForm();
const author = watch('author');
return (
<form onSubmit={handleSubmit(onSubmit)}>
<ReferenceInput
name='author'
label='Author'
reference='authors'
value={author}
onChange={value => setValue('author', value)}
dataProvider={myDataProvider}
/>
<button type='submit'>Submit</button>
</form>
);
}
Error Handling
The component handles various error scenarios:
- Network errors during data fetching
- Validation errors
- Missing data provider
- Empty reference data
<ReferenceInput
name='author'
label='Author'
reference='authors'
errors={['Author is required']}
touched
dataProvider={myDataProvider}
/>
Performance Considerations
- The component loads reference data on mount
- Search functionality is debounced in autocomplete mode
- Options are cached to avoid unnecessary API calls
- Pagination is supported for large datasets
Best Practices
- Use meaningful optionText and optionValue: Choose fields that make sense for your use case
- Implement proper error handling: Handle network errors and validation errors gracefully
- Optimize data provider calls: Use caching and pagination for large datasets
- Provide clear labels and placeholders: Help users understand what they're selecting
- Test accessibility: Ensure the component works with screen readers and keyboard navigation