Я использую shadnui и пытаюсь сделать что-то очень простое > заставить пользователя выбирать из списка от 1 до 6. Я хочу обновить состояние, когда пользователь выбирает число.
Я нашел эту тему Состояние компонента Shadcn ui select не обновляется после изменения Итак, я попробовал это:
"use client"
import { useState } from "react"
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
} from "@/components/ui/select"
export default function Home() {
const [practices, setPractices] = useState(1)
return (
<>
<h1>{practices}</h1>
<div className = "flex justify-between w-2/3">Aantal praktijken
<Select>
<SelectTrigger className = "w-[60px]">
<SelectValue placeholder = "0" />
</SelectTrigger>
<SelectContent>
<SelectItem defaultValue = "1" onValueChange = {() => ( value=> setPractices(value))}>1</SelectItem>
<SelectItem value = "2" onValueChange = {() => ( value=> setPractices(value))} >2</SelectItem>
<SelectItem value = "3" onValueChange = {() => ( value=> setPractices(value))} >3</SelectItem>
<SelectItem value = "4" >4</SelectItem>
<SelectItem value = "5" >5</SelectItem>
<SelectItem value = "6" >6</SelectItem>
</SelectContent>
</Select></div>
</>
);
}
Это не работает. У кого-нибудь есть идеи? Я перепробовал кучу вещей.
onValueChange
следует отдать <Select>
. Вы можете найти в документации Radix UI, которую shad-cn использует «под капотом».
Он отправляет строковое значение, поэтому вам придется либо проанализировать его до int перед установкой состояния, либо просто иметь состояние как строковый тип.
то есть
const [practices, setPractices] = useState(1);
const handleStringToInt = (value: string) => {
setPractices(parseInt(value))
}
...
<Select onValueChange = {handleStringToInt}>
<SelectTrigger className = "w-[60px]">
<SelectValue placeholder = "0" />
</SelectTrigger>
<SelectContent>
<SelectItem value = "1">1</SelectItem>
<SelectItem value = "2">2</SelectItem>
<SelectItem value = "3">3</SelectItem>
<SelectItem value = "4">4</SelectItem>
<SelectItem value = "5">5</SelectItem>
<SelectItem value = "6">6</SelectItem>
</SelectContent>
</Select>
или
const [practices, setPractices] = useState("1");
<Select onValueChange = {setPractices}>
<Select onValueChange = {setPractices}>
эквивалентно <Select onValueChange = {(val) => setPractices(val)}>
здесь
да, у меня тоже была такая же ситуация с shadcn
большое спасибо, это заняло у меня уже несколько часов. это очень понятное и полезное решение, теперь оно работает как шарм! очень ценю!