selectboxでドロップダウンリストのオプション数を調整する
進行中のプロジェクトでselectboxをクリックした後に表示されるドロップダウンリストに5つのオプションを指定する必要がある場合があります.なんでもないけど、結構時間がかかりました・・・きろく🙃
1. <select size={num}>
これは、表示オプションの個数を指定する場合に最も簡単な方法です.でも….この方法は、クリック時にdropdownをポップアップするのではなく、最初に指定した数でdropdownを展開します.だから私にとって、解決方法は適切ではありません.
簡単なプレゼンテーション:http://www.tcpschool.com/html-tag-attrs/select-size
2.useRefとFocusEvent
他の方法を探していると、Stackoverflowで上記の文章を見ました.その文章の著者は貴重なデモリンクも添付した.(ちなみに、原文は一番下のコメントにリンクを残しています!)
ただreactで作成したプロジェクトで働いているので、そうは使えません!しかし、解決策が見つかった以上、少し変わっても一つのことではない.
この代わりにuserefを使用する
関数構成部品を使用しているので、thisは使用できません.逆にuserefを使用して、私が指す要素を指すことができます.そして次のようにすればいいです.
import { useRef } from 'react';
const SelectBox = (props: SelectBoxProps) => {
const selectBox = useRef() as React.MutableRefObject<HTMLSelectElement>;
return (
<>
<SelectBoxStyled {...props}>
<select
ref={selectBox}
onFocus={() => {
selectBox.current.size = 5;
}}
onBlur={() => {
selectBox.current.size = 1;
}}
onChange={(e) => {
selectBox.current.size = 1;
selectBox.current.blur();
}}
>
</SelectBoxStyled>
</>
);
};
export default SelectBox;
CSSの変更
これでselectboxをクリックするとdropdownに希望する個数のオプションが表示されます.しかし、この方法は...上の写真のように...dropdownの増加に伴いselectbox自体も増加します...だから私は以下のように修正しました.
//SelectBox.tsx
return (
<>
<SelectBoxStyled {...props}>
<div className="select-wrap">
<select { /*생략*/ }>
<option value="">{props.subject}</option>
{props.options ? props.options.map((option, idx) => (
<option key={idx} value={option}>{option}</option>
))
: null}
</select>
</div>
</SelectBoxStyled>
</>
);
//SelectBoxStyled.tsx
export const SelectBoxStyled = styled.div<SelectBoxProps>`
position: relative;
display: inline-block;
.select-wrap {
position: absolute;
}
select {
display: inline-block;
}
`;
positionプロパティを利用しました.では最上端に付いている美しいselectboxが出てきます!初めてselectbox customをやったのは面白い経験でしたリファレンス
Reference
この問題について(selectboxでドロップダウンリストのオプション数を調整する), 我々は、より多くの情報をここで見つけました https://velog.io/@1998yuki0331/select-box에서-dropdown의-option-개수-조절하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol