首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ReactJS:创建选择菜单时无法读取event.target.value

ReactJS:创建选择菜单时无法读取event.target.value
EN

Stack Overflow用户
提问于 2021-12-15 19:30:48
回答 1查看 729关注 0票数 1

我试图为我的阿尔戈里亚搜索创建一个基于文档这里有一个简单的例子的自定义菜单选择。我正在使用Tailwind和Headless UI作为我的组件样式。

更具体地说,我试图通过无头UI ( 记录在这里 )来使用记录在这里组件。我的代码如下:

代码语言:javascript
运行
复制
import { connectMenu } from "react-instantsearch-dom";
import React, { useState, Fragment, useEffect } from "react";
import { Listbox, Transition } from "@headlessui/react";
import { CheckIcon, SelectorIcon } from "@heroicons/react/solid";

function classNames(...classes) {
  return classes.filter(Boolean).join(" ");
}

const MobileDropdownS = ({ label, currentRefinement, refine, hide }) => {
  const [selected, setSelected] = useState(true);
 
  const items= [
      { value: 'category', label: 'Category' },
      { value: 'brand', label: 'Brand' },
      { value: 'color', label: 'Color' },
      { value: 'size', label: 'Size' },
  ]

  if (hide) return null;
  return (
    <Listbox
      onChange={(event) => {
        refine(event.target.value);
        setSelected(event.target.value);
      }}
      value={currentRefinement || ""}
    >
      {({ open }) => (
        <div>
          <Listbox.Label>{label}</Listbox.Label>
          <div>
            <Listbox.Button>
              <span>{label}</span>
            </Listbox.Button>

            <Listbox.Options>
              {items.map((item) => (
                <Listbox.Option
                  key={item.label}
                  value={item.isRefined ? currentRefinement : item.value}
                  key={item.label}
                  className={({ active }) =>
                    classNames(
                      active ? "text-white bg-indigo-600" : "text-gray-900",
                      "cursor-default select-none relative py-2 pl-3 pr-9"
                    )
                  }
                >
                  {({ selected, active }) => (
                    <>
                      <div className="flex items-center">
                        <span
                          className={classNames(
                            selected ? "font-semibold" : "font-normal",
                            "ml-3 block truncate"
                          )}
                        >
                          {item.label}
                        </span>
                      </div>

                      {selected ? (
                        <span
                          className={classNames(
                            active ? "text-white" : "text-indigo-600",
                            "absolute inset-y-0 right-0 flex items-center pr-4"
                          )}
                        >
                          <CheckIcon className="h-5 w-5" aria-hidden="true" />
                        </span>
                      ) : null}
                    </>
                  )}
                </Listbox.Option>
              ))}
            </Listbox.Options>
          </div>
        </div>
      )}
    </Listbox>
  );
};

const MobileDropdownSelect = connectMenu(MobileDropdownS);

export default MobileDropdownSelect;

据我理解,ListBox成为阿尔戈利亚文档中的<select>标记,我应该在其中添加以下内容:

代码语言:javascript
运行
复制
refine(event.target.value);
setSelected(event.target.value);

但是,这给我带来了以下错误:

代码语言:javascript
运行
复制
×
TypeError: Cannot read properties of undefined (reading 'value')
onChange
D:/Gatsby/XTheme/src/components/search/MobileDropdown.jsx:22
  19 | <Listbox 
  20 | onChange={
  21 |    event => {
> 22 |     refine(event.target.value)
  23 |     setSelected(event.target.value)
  24 |   } 
  25 | }

这不对吗?如何通过将<select>输入到<ListBox>组件来修复此错误并在Algolia的示例中移植,以便当我从列表框中选择一个项时,它将根据该项细化搜索。

EN

回答 1

Stack Overflow用户

发布于 2021-12-16 20:47:23

使用event.currentTarget.value代替event.target.value。您可以在这个链接中找到两者之间的区别

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70369342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档