Closed4
Chakra UIのRadio GroupをReact Hook Form x Yupでバリデーションを効かせながら実装する
ゴール
- Chakra UIのRadio GroupをReact Hook Formで状態管理しながら利用できること
課題点
- forwardRefの仕組みがわかっていない
- 型パズルが解けない
環境
ツール・ライブラリ | 用途 | バージョン |
---|---|---|
React | フロントエンドのJSライブラリ | 18.2.0 |
React Hook Form | フォームバリデーションライブラリ | 7.33.1 |
@hookform/resolvers | 外部の検証ライブラリを使用する際に利用 | 2.9.6 |
yup | JSスキーマビルダー | 0.32.11 |
node.js | フロント、サーバーサイドの実行環境 | v16.14.0 |
参考資料
以下のコードを真似して書いたがtsで書いているので型が合わないという旨の警告が表示された
import { Box, Button, useRadio } from '@chakra-ui/react'
import React, { forwardRef } from 'react'
type InputProps = JSX.IntrinsicElements['input']
const GenderRadio = forwardRef<HTMLInputElement, InputProps>(
({ ...props }, ref) => {
const { state, getInputProps, getCheckboxProps } = useRadio(props)
const input = getInputProps({ ref })
const checkbox = getCheckboxProps()
return (
<Box as="label">
<input {...input} />
<Button
as="div"
{...checkbox}
cursor="pointer"
colorScheme={state.isChecked ? 'red' : 'gray'}
>
ボタンです
</Button>
</Box>
)
}
)
GenderRadio.displayName = 'GenderRadio'
export default GenderRadio
TS2345: Argument of type '{ ref?: LegacyRef<HTMLInputElement> | undefined; key?: Key | null | undefined; accept?: string | undefined; alt?: string | undefined; autoComplete?: string | undefined; ... 282 more ...; onTransitionEndCapture?: TransitionEventHandler<...> | undefined; }' is not assignable to parameter of type 'UseRadioProps'. Types of property 'value' are incompatible. Type 'string | number | readonly string[] | undefined' is not assignable to type 'string | number | undefined'. Type 'readonly string[]' is not assignable to type 'string | number | undefined'.
そもそもcontrolの型が間違ってるな
型アサーションで無理やり解決させたけどこれで良いのか感が強い
このスクラップは2022/08/02にクローズされました