2022/01/15
25098 ワード
今日やったこと
環境変数の使用
リファレンス
[正式ドキュメント]基本プロパティ:環境変数|次へ。js ブラウザで宣言された環境変数を使用する場合は、 ドロップダウン構成部品ツリーファクトリ
カスタマイズ
既存の
したがって、Custom defaultValueは親コンポーネントからpropsに渡されます. 構成部品を初めてレンダリングするときに
環境変数の使用
リファレンス
[正式ドキュメント]基本プロパティ:環境変数|次へ。js
dotenv
パッケージをインストールする必要はありません..env
、.env.local
、.env.production
などのファイル名は、環境変数を作成します.NEXT_PUBLIC_
という名前のprefix
を追加できます.カスタマイズ
Select
、Option
ラベルコンポーネント化およびstate type
変更既存の
item
stateタイプはHTML Elementなので、属性としてdangerouslysetInnerHTML
...構成部品の初期レンダリングでdefaultValue値を追加する必要があるため、ドロップダウン構成部品リストのdiv要素は使用できません.したがって、
item
stateはタイプをitemList配列のオブジェクトに変更しました.Option
シンボルをアイコン画像のあるタイプとアイコン画像のないタイプに分けます.// Dropdown.tsx
const OptionItemWithImage = (props: any) => {
const { el } = props;
return (
<div
id="item"
data-id={el.id}
className="item with-icon"
onClick={onSelectItem}
style={{
display: 'flex',
alignItems: 'center',
justifyContent: 'space-between',
}}
>
<div style={{ display: 'flex' }} data-id={el.id}>
<img
src={el.img}
id="item_name"
width={18}
height={18}
style={{ marginRight: '0.5rem' }}
/>
<span id="item_name">{el.name}</span>
</div>
<img
src="/svg/check_select.svg"
ref={selectedMark}
width={15}
height={10.5}
style={{ display: 'none' }}
className="selected_mark"
/>
</div>
);
};
const OptionItem = (props: any) => {
const { el } = props;
return (
<div data-id={el.id} className="item" onClick={onSelectItem} id="item">
<span id="item_name">{el.name}</span>
<img
src="/svg/check_select.svg"
className="selected_mark"
ref={selectedMark}
width={15}
height={10.5}
id="item_name"
style={{ display: 'none' }}
/>
</div>
);
};
const CoinInfo = ()=> {
return (
<>
...
<Dropdown
onChange={handleMarket}
itemList={MarketList.slice(0, 3)}
placeholder="거래소 선택"
defaultValue={MarketList.slice(0, 3)[0]} />
...
</>
)
}
Select
が選択されている場合は、選択された情報のステータスがuseEffect
に変更されます./* Dropdown.tsx */
const Dropdown = ({ itemList, placeholder, onChange, defaultValue }: Props) => {
/* 드랍다운 열린 상태/닫힌 상태 (true/false) */
const [isActive, setIsActive] = useState<boolean>(false);
const [item, setItem] = useState<any>(null);
const onActiveToggle = useCallback(() => {
setIsActive((prev) => !prev);
}, []);
useEffect(() => {
if (defaultValue) {
setItem(defaultValue);
}
}, []);
const onSelectItem = useCallback((e) => {
const targetId = e.target.id;
if (targetId === 'item_name') {
const value = e.target.parentElement.dataset.id;
setItem(itemList.filter((el) => el.id === value)[0]);
onChange(value);
} else if (targetId === 'item') {
const value = e.target.dataset.id;
setItem(itemList.filter((el) => el.id === value)[0]);
onChange(value);
}
setIsActive((prev) => !prev);
}, []);
Reference
この問題について(2022/01/15), 我々は、より多くの情報をここで見つけました https://velog.io/@nahsooyeon/20220115テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol