Shadcn/ui Select — изменение состояния, когда пользователь выбирает элемент

Я использую 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>
    </>
  );
}

Это не работает. У кого-нибудь есть идеи? Я перепробовал кучу вещей.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
4
0
6 221
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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)}> здесь

Stackblitz

большое спасибо, это заняло у меня уже несколько часов. это очень понятное и полезное решение, теперь оно работает как шарм! очень ценю!

Santi 13.04.2024 21:27

да, у меня тоже была такая же ситуация с shadcn

cmgchess 13.04.2024 21:28

Другие вопросы по теме