Skip to main content

FieldControlState

Defined in: hooks/types.ts:40

БостояниС поля Ρ„ΠΎΡ€ΠΌΡ‹, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Ρ…ΡƒΠΊΠΎΠΌ useFormControl для FieldNode.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ поля: Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, состояниС Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ, Ρ„Π»Π°Π³ΠΈ взаимодСйствия ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ props для ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

Example​

interface Props {
control: FieldNode<string>;
}

function TextField({ control }: Props) {
const state = useFormControl(control);

return (
<div>
<input
value={state.value}
disabled={state.disabled}
onChange={e => control.setValue(e.target.value)}
/>
{state.shouldShowError && state.errors[0] && (
<span className="error">{state.errors[0].message}</span>
)}
</div>
);
}

See​

  • useFormControl - Ρ…ΡƒΠΊ для получСния состояния
  • ArrayControlState - состояниС для массивов

Type Parameters​

T​

T

Π’ΠΈΠΏ значСния поля (string, number, boolean ΠΈ Ρ‚.Π΄.)

Properties​

componentProps​

componentProps: Record<string, any>;

Defined in: hooks/types.ts:203

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ props для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π² UI-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹. Π£ΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· FieldNode.setComponentProps.

Example​

// Установка props
field.setComponentProps({
placeholder: 'Enter email...',
maxLength: 100,
autoComplete: 'email'
});

// ИспользованиС Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅
const { componentProps, value } = useFormControl(field);

return (
<input
value={value}
placeholder={componentProps.placeholder}
maxLength={componentProps.maxLength}
autoComplete={componentProps.autoComplete}
/>
);

disabled​

disabled: boolean;

Defined in: hooks/types.ts:87

Π€Π»Π°Π³ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ поля. true ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»Π΅ нСдоступно для рСдактирования.

Example​

const { disabled, value } = useFormControl(field);

return (
<input
value={value}
disabled={disabled}
className={disabled ? 'opacity-50' : ''}
/>
);

errors​

errors: ValidationError[];

Defined in: hooks/types.ts:106

Массив ошибок Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ. ΠŸΡƒΡΡ‚ΠΎΠΉ массив ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ отсутствиС ошибок.

Example​

const { errors } = useFormControl(field);

return (
<ul className="error-list">
{errors.map((error, i) => (
<li key={i}>{error.message}</li>
))}
</ul>
);

invalid​

invalid: boolean;

Defined in: hooks/types.ts:140

Π€Π»Π°Π³ нСвалидности поля. true ΠΊΠΎΠ³Π΄Π° Π΅ΡΡ‚ΡŒ ошибки Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ (errors.length > 0). ΠŸΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ valid.

Example​

const { invalid } = useFormControl(field);

return (
<input
aria-invalid={invalid}
className={invalid ? 'border-red' : ''}
/>
);

pending​

pending: boolean;

Defined in: hooks/types.ts:68

Π€Π»Π°Π³ асинхронной Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. true ΠΊΠΎΠ³Π΄Π° выполняСтся асинхронный Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€.

Example​

const { pending } = useFormControl(usernameField);

return (
<div>
<input {...props} />
{pending && <Spinner size="small" />}
</div>
);

shouldShowError​

shouldShowError: boolean;

Defined in: hooks/types.ts:174

Π€Π»Π°Π³ для отобраТСния ошибки. ΠšΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡ touched && invalid - ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ shortcut для UI.

Example​

const { shouldShowError, errors } = useFormControl(field);

return (
<div>
<input {...props} />
{shouldShowError && (
<span className="error">{errors[0]?.message}</span>
)}
</div>
);

touched​

touched: boolean;

Defined in: hooks/types.ts:154

Π€Π»Π°Π³ взаимодСйствия с ΠΏΠΎΠ»Π΅ΠΌ. true послС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΏΠΎΠ»Π΅ потСряло фокус (blur) хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·.

Example​

const { touched, invalid } = useFormControl(field);

// ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС взаимодСйствия
const showError = touched && invalid;

valid​

valid: boolean;

Defined in: hooks/types.ts:121

Π€Π»Π°Π³ валидности поля. true ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»Π΅ ΠΏΡ€ΠΎΡˆΠ»ΠΎ всС Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ (errors.length === 0).

Example​

const { valid } = useFormControl(field);

return (
<input className={valid ? 'border-green' : 'border-gray'} />
);

value​

value: T;

Defined in: hooks/types.ts:50

Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля.

Example​

const { value } = useFormControl(emailField);
console.log(value); // "user@example.com"