DocsCloud UI HooksuseInputState

useInputState

Handle input state changes for both native and custom inputs.

Import

import { useInputState } from '@tidbcloud/uikit'

Usage

useInputState handles state of native inputs (with event in onChange handler) and custom inputs (with value in onChange handler).

import { useInputState } from '@tidbcloud/uikit'
import { TextInput, NumberInput } from '@tidbcloud/uikit'
 
function Demo() {
  const [stringValue, setStringValue] = useInputState('')
  const [numberValue, setNumberValue] = useInputState<string | number>(0)
 
  return (
    <>
      {/* Native input */}
      <input type="text" value={stringValue} onChange={setStringValue} />
 
      {/* Mantine TextInput */}
      <TextInput value={stringValue} onChange={setStringValue} />
 
      {/* Mantine NumberInput (passes value directly) */}
      <NumberInput value={numberValue} onChange={setNumberValue} />
    </>
  )
}

Comparison with useState

import { useState } from 'react'
import { useInputState } from '@tidbcloud/uikit'
import { TextInput, NumberInput } from '@tidbcloud/uikit'
 
// With useState - requires different handling
function WithUseState() {
  const [stringValue, setStringValue] = useState('')
  const [numberValue, setNumberValue] = useState<string | number>(0)
 
  return (
    <>
      <input type="text" value={stringValue} onChange={(event) => setStringValue(event.currentTarget.value)} />
      <TextInput value={stringValue} onChange={(event) => setStringValue(event.currentTarget.value)} />
      <NumberInput value={numberValue} onChange={setNumberValue} />
    </>
  )
}
 
// With useInputState - unified handling
function WithUseInputState() {
  const [stringValue, setStringValue] = useInputState('')
  const [numberValue, setNumberValue] = useInputState<string | number>(0)
 
  return (
    <>
      <input type="text" value={stringValue} onChange={setStringValue} />
      <TextInput value={stringValue} onChange={setStringValue} />
      <NumberInput value={numberValue} onChange={setNumberValue} />
    </>
  )
}

Definition

type UseInputStateReturnValue<T> = [T, (value: null | undefined | T | React.ChangeEvent<any>) => void]
 
function useInputState<T>(initialState: T): UseInputStateReturnValue<T>