κ°μ
λ―Έμ | κΈ°κ° | Repository | PR & Review | github page |
---|---|---|---|---|
μ μ¬ λ λ¨Ήμ§ 1λ¨κ³ | 23-02-28 - 23-03-03 |
Repo | PR Review | π μ μ¬ λ λ¨Ήμ§ |
π λ―Έμ μ§ν κ³Όμ
λ 벨 1μ μΈ λ²μ§Έ λ―Έμ
μ μ λͺ©μ μ μ¬ λ λ¨Ήμ§
μ΄λ€. μΉ΄ν
κ³ λ¦¬, μ΄λ¦, μΊ νΌμ€λ‘ λΆν° 거리, μ€λͺ
, μ°Έκ³ λ§ν¬μ κ°μ μμμ μ λν κ°μ λ°νμΌλ‘ μμμ λͺ©λ‘μ μμ±νκ³ μ΄λ₯Ό μΉ΄ν
κ³ λ¦¬λ³λ‘ νν°λ§μ νκ³ μ΄λ¦μ, 거리μμΌλ‘ μ λ ¬νλ κΈ°λ₯μ λ§λλ κ² κΉμ§κ° 1λ¨κ³μλ€. μμ² μ¬νν΄ λ³΄μλ€! νμ§λ§.. νμ
μ€ν¬λ¦½νΈλ₯Ό λμ
ν΄μΌ νκ³ , μ»΄ν¬λνΈ λ¨μλ‘ λͺ¨λν νμ¬ κ°λ°, μ»΄ν¬λνΈ λ¨μ ν
μ€νΈλ ν¨κ» κ³ λ―Όνμ¬ λ―Έμ
μμμ μ΄λ₯Ό λ
Ήμ¬λ΄μΌ νμλ€.
νμ
μ€ν¬λ¦½νΈ! μ€μΌμ΄ μ§κΈ ν°μ²μΊ νλ‘μνΈλ₯Ό μ§ννλ©΄μ μ
μ μλμ§λ§ μ΄λμ λ
μ¨ λ΄€μΌλ κΈλ°© μ μν μ μμ κ²μ΄λ μκ°μ΄ λ€μλ€. 그건 νλ Έλ€. λͺ¨λ₯΄λ νμ
μ€ν¬λ¦½νΈ λ¬Έλ²μ΄ λ무 λ§μλ€. λ¨μν νμ
μ μ§μ νλ κ²μ΄ μλ νμ
μ€ν¬λ¦½νΈλ₯Ό μ μ°κΈ°
μν 곡λΆλ₯Ό μ΄λ² 3μμ λ³ννλ©° λ―Έμ
λ€μ μ§νν΄μΌκ² λ€.
μ»΄ν¬λνΈ λ¨μλ‘ λͺ¨λν! μ κ°μ΄ μ‘νμ§ μμλ€. μ¬κΈ°μ κΈ°μμ μ΄λ»κ² νλ κ²μ΄ μ’λ€. μΉ μ»΄ν¬λνΈ, μλμ° λ λ± λ€μν, κ·Έλ μ§λ§ λ μ λͺ¨λ₯΄λ μ©μ΄λ€μ΄ λ§κ΅¬ λ€λ¦¬κΈ° μμνλ€. κ³ μμ ν κ²μ΄λΌκ³ μκ°μ νκ³ μ΄λ μ λ΅μ΄μλ€. κ²°κ΅ νμ΄μΈ μλ‘μ€νμ ν¨κ» μΉ μ»΄ν¬λνΈλ₯Ό μ¬μ©νκΈ°λ‘ κ²°μ¬νμκ³ Custom elements
μ shadow DOM
λ₯Ό μ²μμΌλ‘ μ¬μ©νκ² λμλ€. λ€νν μλ‘μ€νλ μ΄μ λ―Έμ
μ μΉ μ»΄ν¬λνΈλ‘ νκΈ° λλ¬Έμ μμμ λ§μ κ²μ λ°°μΈ μ μμλ€. λ¨μ§ λ΄κ° λ무 λλ € νΌν΄λ₯Ό μ£Όμ§ μμμκΉ νλ λ―Έμν λ§μμ΄ λ λ€.. ꡬ쑰λ₯Ό μ΄ν΄νλ©° λμ΄κ°λ €λ©΄ μλλ λ¦μ΄μ§ μλ°μ... π’ μΈ λ²μ§Έ λ―Έμ
μ μ§ννλ©΄μ μΉ μ»΄ν¬λνΈμ λ μ΅μν΄μ§λλ‘ νμ. κ·Έλ¦¬κ³ μΉ μ»΄ν¬λνΈκ° μ λ΅μ μλ μ μλ€. κ·Έλ¦¬κ³ κ·Έλ κ² λμ€νλ κΈ°λ₯μ΄ μλ μ μλ€. νμ§λ§ ν λ² μ¨λ³΄λ©΄μ 곡λΆνλ κ²κ³Ό μμ λͺ¨λ₯΄λ κ²μ νλκ³Ό λ
μ°¨μ΄λΌκ³ μκ°νλ€. κ·Έλ¬λ―λ‘ μ±μ€νκ² κ³΅λΆνμ.
μ»΄ν¬λνΈ λ¨μ ν μ€νΈ! μκ° λΆμ‘±μΌλ‘ μΈν΄ λ―Έ μμ±... πππ 리ν©ν°λ§ κΈ°κ°μ μ΄μ¬ν μμ±νμ! μλ§ κ·Έλ¦¬κ³ λ€μ μ£Ό 2λ¨κ³λ₯Ό μ§νν λμ μ»΄ν¬λνΈ λ¨μ ν μ€νΈλ κ³μ 곡λΆν λ―νλ€
μ μ¬ λ λ¨Ήμ§
λ―Έμ
μ ν΅ν΄ λ§μΉ μ²μ νλ‘κ·Έλλ° κ³΅λΆλ₯Ό νλ λλ‘ λμκ°λ λ―ν λλμ λ°μλ€. μ€λλ§μ λ¨Έλ¦¬κ° ν°μ§ κ² κ°μ λλμ λ°μΌλ©΄μ κ³ ν΅μ λ°κΈ°λ νμμ§λ§ μ΄κ²μ΄ λ΄κ° νλ‘κ·Έλλ°μ μ’μνλ μ΄μ μ΄μ§ μμκΉ μΆλ€. νλνλ λ°°μ°λ©΄μ μ§μμ λνλ κ²μ΄ μ¦κ²λ€κ³ μκ°νλ€. λ¨μ 3μ λμ λΆμ‘±ν μλ°μ€ν¬λ¦½νΈ κ°λ
μ μ±μ°κ³ νμ
μ€ν¬λ¦½νΈμ μ΅μν΄μ§λλ‘ λ
Έλ ₯νμ.
π¬ νμ΄νλ‘κ·Έλλ° μ§ν κ³Όμ
μ μ¬ λ λ¨Ήμ§
λ―Έμ
μ νμ΄λ μλ‘μ€νμ΄λ€. νμ μλ‘μ€νμ λ μΉν΄μ§κ³ μΆμ λ§μμ΄ μμλλ° μ΄λ² κΈ°νμ λ κ°κΉμμ§ μ μλ κΈ°νμλ€. λ¬Όλ‘ νμ΄νλ‘κ·Έλλ°μ΄κΈ° λλ¬Έμ μ΄λ ν μν©μ΄ μ°Ύμμ¬μ§λ λͺ¨λ₯΄κ² μ§λ§, νμ΄νλ‘κ·Έλλ°μ΄ λλ μ§κΈμ μ΄μ λ³΄λ€ λ κ°κΉμμ‘λ€κ³ μκ°νλ€. λ¬Όλ‘ λλ§ κ·Έλ΄ μλ μμ§λ§..γ
γ
μ λ§ λ§μ λμμ μ»μλ€. μ§μ ν κ³ μλ₯Ό λ§λ λλμ΄λκΉ...? μ§κΈκΉμ§ ν΄μ€λ νλ‘κ·Έλλ°μ μμΌλ₯Ό ν λ¨κ³ λ λμ΄μ§λ λλμ λ°μλ€. μμ§μ μμΌλ§ λμ΄μ‘μ λΏ λμ μμΌλ‘ κ°μ§ λͺ»ν΄μ κΎΈμ€ν λ Έλ ₯μ΄ νμνλ€. μλ°μ€ν¬λ¦½νΈμ λ¬Έλ²μ μ¬μ©νλ κ²λΆν° μμνμ¬ νμ μ€ν¬λ¦½νΈμ λ€μν λ¬Έλ²μ νμ©νμ¬ νμ μ μ μνλ κ²μ μμμ λ³΄κ³ μ§λ¬Έμ νκ³ μΆμ λ§μμ΄ κ΅΄λκ°μμ§λ§ λ§μ΄ νμ§ λͺ»ν μμ¬μμ΄ λ¨λλ€.
μμΌκ° λμ΄μ‘λ€.λΌλ κ²μ μ‘°κΈ λ μ€λͺ
νμλ©΄ μ²μ μλ°μ€ν¬λ¦½νΈ 곡λΆλ₯Ό μμνκ³ λ°°μ΄ λ©μλλ₯Ό λ°°μΈ λ, forEach
λ©μλμ map
λ©μλμ μ°¨μ΄μ μ λν΄ λͺ
νν ꡬλΆλμ§ μμ κ³ μνλ μ μ΄ μμλ€. κ·Έλ¬λ€κ° μ΄λ μκ° μ΄ λμ μ°¨μ΄λ₯Ό μκ³ μ μ ν μν©μμ λ©μλλ₯Ό νμ©ν μ μμλ κ² λν μμΌκ° λμ΄μ‘λ€κ³ ν μ μλ€. μ΄λ² νμ΄νλ‘κ·Έλλ°μμλ μ΄μ κ°μ κ²½νμ νκ² λμλ€. λ―Έμ
μμ μ λ ¬κ³Ό νν° κΈ°λ₯μ ꡬννκΈ° μν΄ μλμ κ°μ ν΄λμ€ νλλ₯Ό λ§λ€μ΄ μ¬μ©νμλ€.
class App {
#filterPipes: Partial<
Record<'filter' | 'sort', (restaurants: Restaurant[]) => Restaurant[]>
> = {};
}
Partial(νμ )
: κ° μμ±μ μ νμ μΌλ‘ λ§λλ λ° μ¬μ©Record
: ν€ νμ μ μ μ°μ±μ μ 곡νλ μ λλ¦ νμ
#filterPipes
κ°μ²΄λ₯Ό μ΄μ©νλ©΄ μμ νμ
μ€ν¬λ¦½νΈμ νμ
μ λ¨Όμ μ΄ν΄ν΄μΌ νλ€. μ΄λ¬ν νμ
μ€ν¬λ¦½νΈμ νμ
μ μλ‘μ€νμ νμ΄νλ‘κ·Έλλ°μ ν΅ν΄ μκ² λ κ²μΌλ‘ μ΄μ λν΄ μ‘°κΈ λ 곡λΆνμ¬ TILμ μ 리ν κ³νμ΄λ€. μ무νΌ! #filterPipes
λ₯Ό ν΅ν΄ μ λ ¬κ³Ό νν° κΈ°λ₯μ λμμ ꡬνμ ν μ μλ€.
λ¨Όμ νν°λ§νλ λΆλΆμ΄λ€.
if (value === 'μ 체') {
this.#filterPipes.filter = (_restaurants: Restaurant[]) =>
Restaurants.getSorted(_restaurants, Restaurants.byName);
} else {
this.#filterPipes.filter = (_restaurants: Restaurant[]) =>
Restaurants.filterByCategory(_restaurants, String(value));
}
value
λ₯Ό κΈ°μ€μΌλ‘ #filterPipes
κ°μ²΄μ filter
κ°μ΄ μ ν΄μ§λ€. μ μ²΄μΌ κ²½μ° νν°λ§μ νμ§ μκΈ° λλ¬Έμ μ΄λ¦μμΌλ‘ μ λ ¬νλ ν¨μκ° κ°μΌλ‘ λκ³ μ μ²΄κ° μλ κ²½μ° νΉμ μΉ΄ν
κ³ λ¦¬λ₯Ό κΈ°μ€μΌλ‘ νν°λ§λλ ν¨μκ° κ°μ΄ λλ€.
μ΄λ²μ μ λ ¬νλ λΆλΆμ΄λ€.
const sortFilter = (_restaurants: Restaurant[]) =>
Restaurants.getSorted(
_restaurants,
$rSelect.getSelectedOption()?.value === 'name'
? Restaurants.byName
: Restaurants.byDistance
);
this.#filterPipes.sort = sortFilter;
μ λ ¬μ μ΄λ¦μ, 거리μ μ€ νλλ‘ νκΈ° λλ¬Έμ value
κ° name
μΌ λμ κ·Έλ μ§ μμ λ μ λ¬νλ λ λ²μ§Έ μΈμκ° λ¬λ¦¬μ§λ€. μ무νΌ...! μμ κ³Όμ μμ #filterPipes
κ°μ²΄μ sort
μ κ°μ΄ μ ν΄μ§λ€.
μ΄λ‘μ¨ μ μ μλ μ¬μ€μ #filterPipes
μ ν€λ€μ ν¨μλ₯Ό κ°μΌλ‘ κ°μ§κ³ μλ κ²μ΄λ€. μ΄ ν¨μλ Restaurant[]
λ₯Ό μΈμλ‘ λ°λ κ²μ΄κ³ ..!
λ§μ§λ§μΌλ‘ μμμ λͺ©λ‘μ΄ λ λλ§ λλ λΆλΆμ μ΄ν΄λ³΄μ. μ΄ λΆλΆμ΄ κ°μΈμ μΌλ‘ λ§μ΄ ν₯λ―Έλ‘μ λ€.
this.$restaurantList.setRestaurants(
Object.values(this.#filterPipes).reduce(
(filteredRestaurants, filter) => filter(filteredRestaurants),
this.#restaurants
)
);
μ¬κΈ°μμ this.$restaurantList
μ DOM κ°μ²΄μ΄κ³ μ΄λ custom Elements
μ΄λ€. ν΄λΉ κ°μ²΄μλ setRestaurants
λΌλ λ©μλκ° μλλ° μ΄ λ©μλλ₯Ό ν΅ν΄ μμμ λͺ©λ‘μ΄ λ°λκ³ λ°λ μμμ λͺ©λ‘μ΄ λλλ§ λλ κ²μ΄λ€.
μλλ setRestaurants
λ©μλμ μΈμμΈ μμμ λͺ©λ‘(Restaurant[]
)μ ꡬνλ κ³Όμ μ΄λ€.
Object.values()
λ©μλλ₯Ό μ¬μ©νμ¬this.#filterPipes
κ°μ²΄μ κ°μ λ°°μ΄λ‘ λ§λ λ€. μ΄λ, λ°°μ΄μ μμλ ν¨μκ° λλ€.reduce()
λ©μλλ₯Ό μ¬μ©νλ€. μ΄λ μ΄κΈ°κ°μ λͺ¨λ μμμ λͺ©λ‘μ΄ λλ€.filter
λ νν°λ§, μ λ ¬μ νμν ν¨μ(1λ² κ³Όμ μμμ λ°°μ΄μ μμ)μ΄λ€. μ΄λ μμμ λͺ©λ‘μ μΈμλ‘ λ°κ³ νν°λ§, μ λ ¬μ κ±°μΉ μμμ λͺ©λ‘μ λ°ννλ€.
μ΄λ κ² κ°μ²΄μ κ°μ ν¨μλ‘ μ¬μ©νλ©΄μ reduce
λ©μλλ₯Ό ν΅ν΄ μνλ κ°μ μ»μ΄λ΄λ κ³Όμ μμ μμΌκ° λμ΄μ§ λλμ΄ λ λ€. μ΄λ¬ν κ³Όμ μ νΌμμλ νμ§ λͺ»νμ κ²μ΄λ€. νμ§λ§ μ΄μ΄ μ’κ² μ΄λ² νμ΄νλ‘κ·Έλλ°μ ν΅ν΄μ κ²½ννκ² λμκ³ μμΌλ‘ λμ μ±μ₯μ ν° λμμ΄ λ μ μμ κ²μ΄λΌ λ―Ώλλ€.
π μν μ
- λ³΄λ€ μ΅μν λ°©λ²μΌλ‘ λ―Έμ μ μ§νν μ μμμ§λ§, μλ‘κ² λ°°μ΄λ€λ μκ°μΌλ‘ μ²μ μ νλ κ°λ μ λ°°μ°λ©΄μ λ―Έμ μ μ§ννλ€.
- ν¬κΈ°νμ§ μμλ€... λ§μΌλ‘λ μνλ€κ³ μκ°νλ€.
π μμ¬μ΄ μ
- μκ°μ΄ μ΄λ°ν΄μ κ·Έλ°μ§... μ§λ¬Έμ λ§μ΄ νμ§ λͺ»νλ€.
- νμ μ€ν¬λ¦½νΈμ λν κ°λ μ΄ λΆμ‘±νλ€.
- ν μ€νΈ μ½λ μμ±μ΄ λ―Έν‘νλ€.
π μμΌλ‘μ κ°μ€
- μ΄λ² λ―Έμ μ ν΅ν΄ λ°°μ΄ κ²λ€μ λ΄ κ²μΌλ‘ λ§λ€μ. TILλ₯Ό ν΅ν΄ μ 리λ νμ.
- λ 벨 1μ΄ λλκΈ° μ , μ΄ν©ν°λΈ νμ μ€ν¬λ¦½νΈλ₯Ό 보며 곡λΆνμ.
π οΈ λ¦¬ν©ν°λ§
components ν΄λ μΈλΆν
λ€λ₯Έ μ»΄ν¬λνΈμμ μ¬μ©ν μ μλ μ»΄ν¬λνΈλ€μ shared
ν΄λλ‘ λ¬Άμ΄ κ΄λ¦¬ν μ μλλ‘ νμλ€. μ¬κΈ°μ μλ μ»΄ν¬λνΈλ€μ λ¨λ
μΌλ‘λ μ¬μ©ν μ μκ³ μλ‘ λ¬ΆκΈ° κ±°λ μμ elementsλ₯Ό κ°μ§ μ μλ€. μ΄λ κ² μ¬λ¬ κ³³μμ μ¬μ¬μ©ν μ μλ μ»΄ν¬λνΈλ€μ΄ μλ κ³³μΈ shared
μ΄λ€.
λ°λλ‘ μ΄λ¦μ κ°μ§ ν΄λμ μ‘΄μ¬νλ μ»΄ν¬λνΈλ€μ μ€μ λ‘ μΉμ λλλ§ λλ μ»΄ν¬λνΈλ€μ΄λ€.
μΆκ°μ μΌλ‘ R-
λ₯Ό μ κ±°νμ¬ νμΌλͺ
μ ν΅ν΄ μ»΄ν¬λνΈκ° νλ μν μ λ μ½κ² νμ
ν μ μλλ‘ λ¦¬ν©ν°λ§ νμλ€.
μ΄κΈ° λ°μ΄ν°μ νμ©
r-select
νκ·Έμλ μ΄κΈ°κ°μ΄ νμνλ€. κ·Έ μ΄μ λ μ΅μ
κ°μ΄ νμνκΈ° λλ¬Έμ΄λ€. μ΄λ₯Ό fixtures.ts
ν΄λμμ λΆλ¬μ μ¬μ©ν μ μλλ‘ νμλ€.
리ν©ν°λ§ μ μ½λ π
// app.ts
class App {
// ...
initSelect() {
this.$restaurantFilterSelect.setOptions([
{ value: 'μ 체', label: 'μ 체' },
...Restaurant.CATEGORIES.map((category) => ({
value: category,
label: category,
})),
]);
this.$restaurantSortSelect.setOptions([
{ value: 'name', label: 'μ΄λ¦μ' },
{ value: 'distance', label: '거리μ' },
]);
}
initModalSelect() {
this.$restaurantModalCategory.setOptions([
{ value: '', label: 'μ νν΄μ£ΌμΈμ' },
...Restaurant.CATEGORIES.map((category) => ({
value: category,
label: category,
})),
]);
this.$restaurantModalDistance.setOptions([
{ value: '', label: 'μ νν΄μ£ΌμΈμ' },
...Restaurant.DISTANCE_BY_MINUTES.map((distance) => ({
value: distance,
label: `${distance}λΆ λ΄`,
})),
]);
}
// ...
}
리ν©ν°λ§ ν μ½λ π
class App {
// ...
// app.ts
initSelect() {
this.$restaurantFilterSelect.setOptions(DEFAULT_FILTER_OPTIONS);
this.$restaurantSortSelect.setOptions(DEFAULT_SORT_OPTIONS);
}
initModalSelect() {
this.$restaurantModalCategory.setOptions(DEFAULT_MODAL_CATEGORY_OPTIONS);
this.$restaurantModalDistance.setOptions(DEFAULT_MODAL_DISTANCE_OPTIONS);
}
// ...
}
// fixtures.ts
export const DEFAULT_FILTER_OPTIONS = [
{ value: FILTER.value.entire, label: FILTER.label.entire },
...Restaurant.CATEGORIES.map((category) => ({
value: category,
label: category,
})),
];
export const DEFAULT_SORT_OPTIONS = [
{ value: SORT.value.name, label: SORT.label.name },
{ value: SORT.value.distance, label: SORT.label.distance },
];
export const DEFAULT_MODAL_CATEGORY_OPTIONS = [
{ value: DEFAULT_OPTION.value, label: DEFAULT_OPTION.label },
...Restaurant.CATEGORIES.map((category) => ({
value: category,
label: category,
})),
];
export const DEFAULT_MODAL_DISTANCE_OPTIONS = [
{ value: DEFAULT_OPTION.value, label: DEFAULT_OPTION.label },
...Restaurant.DISTANCE_BY_MINUTES.map((distance) => ({
value: distance,
label: `${distance}λΆ λ΄`,
})),
];
components/index νμΌ μν λΆμ¬
λ¨μν νμΌμ λΆλ¬μ€λ κ²μ΄ μλ λΆλ¬μ¨ νμΌμ κ°μ²΄λ‘ λ¬Άκ³ νμ μ΄ νμν μ»΄ν¬λνΈλ€μ λν΄μλ νμ μ exportλ₯Ό νλ μν μ μ£Όμλ€.
import Restaurant from './restaurant/Restaurant';
import RestaurantList from './restaurant/RestaurantList';
import Modal from './modal/Modal';
import Button from './shared/Button';
import FormItem from './shared/FormItem';
import Input from './shared/Input';
import Select from './shared/Select';
import Textarea from './shared/Textarea';
export type CustomRestaurantListElement = RestaurantList;
export type CustomSelectElement = Select;
export type CustomModalElement = Modal;
export default {
Restaurant,
RestaurantList,
Modal,
Button,
FormItem,
Input,
Select,
Textarea,
};
μ΄λ²€νΈνΈλ€λ¬ μ½λ°±ν¨μ λΆλ¦¬
νμμλ μ΄μ¬ν λΆλ¦¬νμλ μ΄λ²€νΈνΈλ€λ¬μ μ½λ°±ν¨μμμ§λ§, μ΄λ²μλ μκ°μ΄ λΆμ‘±νμ¬ λΆλ¦¬λ₯Ό νμ§ λͺ»νμλ€. μ΄λ₯Ό 리ν©ν°λ§ λ μλ£νμλ€!
맀μ§λλ² μμν
맀μ§λλ²μ μμνλ λ§μ°¬κ°μ§λ‘ λ―Έμ² μλ£νμ§ λͺ»νλ€. νμμ μ΅κ΄μ λ§λ€μ΄μΌμ§... μ¬λ§νλ©΄ μ½λ°±ν¨μλ..
constructor μΆκ°
μ§κΈκΉμ§ ν΄λμ€λ₯Ό λ€λ£¨λ©΄μ μΈμ€ν΄μ€λ₯Ό μμ±ν λ λ³λ€λ₯Έ μΈμκ° μμΌλ©΄ constructor
λ₯Ό μ¬μ©νμ§ μμλ€. νμ§λ§ ν΄λμ€λ₯Ό μ¬μ©νλ€ νμ λ, λ€λ₯Έ κ°λ°μλ€μ constructor
λ₯Ό λ¨Όμ μ°ΎμΌλ©΄μ ꡬ쑰λ₯Ό νμ
ν μ μλ€λ μκ°μ νκ² λμλ€. μ΄λ‘ μΈν΄ constructor
λ₯Ό μΆκ°νκ² λμλ€. κ·Έλ λ€λ©΄ μ΄λ²μ μ¬μ©ν μΉ μ»΄ν¬λνΈλ€μ μ΄λ»κ² ν κΉ? λͺ¨λ ν΄λμ€μΈλ° λͺ¨λ λΆλͺ¨λ₯Ό μμλ°κ³ μλ€. λΉμ°ν μΈμλ μκ³ ! κ³Όμ°..?
querySelector μ€ν¨ μ λΆλ¦¬νκΈ°
?.querySelector<HTMLSelectElement>('#select')
?.addEventListener('change', (event) => {})
μμ κ°μ μ½λκ° μλ€. $select
λ elementμΌ μλ μκ³ null
μΌ μλ μλ€. null
μΈ κ²½μ° μ΄λ²€νΈλ₯Ό λ±λ‘ν μ μκΈ° λλ¬Έμ ?
λ₯Ό λΆμ¬μΌ νλ€. νμ§λ§ μ€λ₯λ‘ μΈν΄ νμ μλ€κ³ μκ°ν $select
μ΄ μλ€λ©΄ μ΄λ²€νΈλ λ°μνμ§ μμ κ²μ΄κ³ λ°μνμ§ μμ μ΄λ²€νΈλ‘ μΈν΄ μ¬μ©μλ λ¬Όλ‘ μ€λ₯λ₯Ό μμ νκ³ μ νλ κ°λ°μμκ²λ ν° μ΄λ €μμ΄ μ°Ύμμ¬ κ²μ΄λ€. μ΄λ, νμ€ν μμΈ μ²λ¦¬λ₯Ό νλ κ²μ΄ μ’λ€.
λλ¬Έμ μλμ κ°μ΄ 리ν©ν°λ§μ μ§ννμλ€. μμ§ μμΈμ²λ¦¬λ νμ§ μμμ§λ§ 2λ¨κ³ λ―Έμ μ ν΅ν΄ μμΈμ²λ¦¬λ₯Ό μμ±ν κ²μ΄λ€.
'π μ°μνν ν¬μ½μ€ > Level1' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
λ 벨1 μν 리뷰 - step1 (2) | 2023.04.14 |
---|---|
λ 벨1 μ μ¬ λ λ¨Ήμ§ - step2 (0) | 2023.04.14 |
λ 벨1 νμ΄μ λ‘λ - step2 (0) | 2023.04.13 |
λ 벨1 νμ΄μ λ‘λ - step1 (0) | 2023.04.13 |
λ 벨1 μλμ°¨ κ²½μ£Ό - step2 (0) | 2023.04.10 |