【发布时间】:2021-09-25 19:52:27
【问题描述】:
我正在创建一个下拉组件,但 typescript 在 options.map 和 selectedOption.title 案例中抛出了几个错误:
import React, { useRef,useState, useEffect } from "react";
import useToggle from '../hooks/useToggle';
import useDetectOutsideClick from '../hooks/useOutsideClick';
import "./select.scss";
interface TProduct {
title?: string;
options?: [];
getDropDownValue?: any;
}
interface TOption {
title?: string;
value?: string;
id?: any;
}
const Select = (props: TProduct) => {
let { title, options, getDropDownValue } = props;
const dropdownRef = useRef(null);
const [visibility, setVisibility] = useDetectOutsideClick(dropdownRef, false);
const [selectedOption, setSelectedOption] = useState<TOption>({});
return (
<div
className="base-select"
ref={dropdownRef}
onClick={e => {
setVisibility(!visibility);
}}
>
<div className="selected-option">
<span
title={
selectedOption === ""
? title
: selectedOption.title
}
>
{selectedOption === ""
? title
: selectedOption.title.length <= 20
? selectedOption.title
: selectedOption && selectedOption.title && `${selectedOption.title.slice(0, 20)}`}
</span>
</div>
{visibility && (
<div className="options">
<ul>
{options
.map((option) => (
<li
key={index}
className={
selectedOption && selectedOption === option
? "active-option"
: ''
}
onClick={() => {
setSelectedOption(option);
getDropDownValue(option);
}
}
>
{option.title}
</li>
))}
</ul>
</div>
)}
</div>
);
};
export default Select
所以列表项和标题的循环都会抛出选项类型和 selectedOptions.title 类型的错误 Object is possible undefined
出了什么问题,如何解决?
【问题讨论】:
-
添加
?以在访问属性之前检查对象的可用性。比如possiblyUndefinedObject?.title -
我还建议将
&&运算符更新为selectedOption?.id === option.id,您不可能使用==或===将selectedOption等对象与另一个对象匹配。 -
@SultanH。它显示了 key= {index} 以及循环中 option.title 中的错误。我猜 ?标记并不能解决问题。如果可以,请您回答问题?
标签: javascript reactjs typescript react-hooks typescript2.0