React下拉框选中值无法展示到search_box div问题排查
你的代码存在3处核心错误,逐一说明:
- 第一处:下拉选项点击事件的传参错误。你当前写的
onClick={val => onSelect(val)}中,val是浏览器原生的点击事件对象,不是你需要的地区名称,所以dropDownValue实际被赋值为事件对象,不是预期的字符串,需要在点击时直接传入当前遍历到的countries.name作为参数。 - 第二处:
search_box容器的文本是硬编码的,没有和dropDownValue状态绑定,所以即使状态更新,展示内容也不会变化。 - 第三处:控制台打印代码放在了JSX的遍历逻辑中,会在每次组件渲染时执行,不是点击选项时触发,所以无法正确打印选中后的值。
修正后的完整代码如下:
import React, { useState } from "react"; import './search.css'; import { IoMdArrowDropdown } from 'react-icons/io'; import { GoTriangleUp } from 'react-icons/go'; import data from '../../../../data.json'; const SearchBox = () => { const [open, setOpen] = useState(false); const [dropDownValue, setDropDownValue] = useState(null); const onSelect = (value) => { setDropDownValue(value); setOpen(!open); // 需要排查选中值可以在这里打印 console.log('选中的地区:', value) }; return ( <div className="box_district"> <div className="district_caption">District</div> <div className="block_drop"> <div className="district_dropdown"> {/* 绑定状态,未选中时显示默认提示 */} <div className="search_box"> {dropDownValue || "Enter District"} </div> <div className="drop_icon" onClick={() => setOpen(prev => !prev)}> {open ? <GoTriangleUp size={"22px"} /> : <IoMdArrowDropdown size={"30px"} />} </div> </div> <div className={open ? "open_options" : "options"}> {data.map((countries) => ( <div className="select_options" key={countries.name} // 新增key避免React列表遍历警告 onClick={() => onSelect(countries.name)} // 直接传入当前遍历的地区名 > {countries.name} </div> ))} </div> </div> </div> ); } export default SearchBox;
内容的提问来源于stack exchange,提问作者coolhack7
相关产品推荐
相关产品推荐

