Часть 4: Переход

В этой части мы собираемся добавить переход в список.

Сначала нам нужно добавить переход от реакции безголового пользовательского интерфейса.

import { Listbox ,Transition } from '@headlessui/react'

Затем мы используем компонент ‹Transition›, чтобы обернуть ‹Listbox.Options›

Копируем компонент «Переход» из документации и вносим корректировку в масштаб

enterFrom="transform scale-125 opacity-0"

export default function MyListbox() {
const [open, setOpen] = useRecoilState(openState)
const [selectedPerson, setSelectedPerson] = useState([people[0], people[1]])
return (
<div className="fixed top-16 w-72 left-16">
<Listbox value={selectedPerson} onChange={setSelectedPerson} name="assignee" multiple horizontal>
<Listbox.Label>Assignee:</Listbox.Label>
<Listbox.Button className="relative w-full cursor-default rounded-lg bg-white py-2 pl-3 pr-10 text-left shadow-md focus:outline-none focus-visible:border-indigo-500 focus-visible:ring-2 focus-visible:ring-white focus-visible:ring-opacity-75 focus-visible:ring-offset-2 focus-visible:ring-offset-orange-300 sm:text-sm"> {selectedPerson.map((person) => person.name).join(',')}</Listbox.Button>
<Transition
enter="transition duration-100 ease-out"
enterFrom="transform scale-125 opacity-0"
enterTo="transform scale-100 opacity-100"
leave="transition duration-75 ease-out"
leaveFrom="transform scale-100 opacity-100"
leaveTo="transform scale-95 opacity-0"
>
<Listbox.Options className="absolute mt-1 max-h-60 flex flex-row  rounded-md bg-white py-1 text-base shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none sm:text-sm">
{people.map((person) => (
<Listbox.Option
key={person.id}
value={person}
disabled={person.unavailable}
as={Fragment}
className={({ active }) =>
`relative cursor-default select-none py-2 pl-10 pr-4 ${active ? 'bg-amber-100 text-amber-900' : 'text-gray-900'
}`
}
>
{({ active, selected }) => (
<li
className={`${active ? 'bg-blue-500 text-white' : 'bg-white text-black'
}`}
>
{selected ? (
<span className="absolute inset-y-0 left-0 flex items-center pl-3 text-amber-600">
<CheckIcon className="h-5 w-5" aria-hidden="true" />
</span>
) : null}                {person.name}
</li>
)}
</Listbox.Option>
))}
</Listbox.Options>
</Transition>
</Listbox>
</div>
)
}

Если вам понравилась эта история, вам также может понравиться подписка на Medium. Это всего 5 долларов в месяц (цена чашки кофе!), но это даст вам неограниченный доступ к историям, поддерживая ваших любимых писателей. Если вы зарегистрируетесь по этой ссылке, я получу небольшую комиссию. Спасибо!

Подписывайтесь на нас: YouTube, Medium, Udemy, Linkedin, Twitter, Instagram, Gumroad, Quora, Telegram.

Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord. Заинтересованы в Взлом роста? Ознакомьтесь с разделом Схема.