πŸ§‘‍πŸ’» Web/React

[React] μ˜΅μ…”λ„ 체이닝

Lennon 2022. 7. 21. 22:20
728x90
λ°˜μ‘ν˜•

λ¦¬μ•‘νŠΈλ₯Ό μ‚¬μš©ν•΄ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ‹€λ³΄λ©΄ μ„œλ²„ν†΅μ‹  및 μ»΄ν¬λ„ŒνŠΈ 라이프 사이클 차이에 따라 null, undefinedλ₯Ό λ°˜ν™˜ν•΄ 가끔 였λ₯˜κ°€ λ°œμƒν•˜κ³€ ν•œλ‹€.

μ΄λŠ” κ·Έλž˜λ„ μΉœμ ˆν•˜κ²Œ 였λ₯˜ μ½”λ“œλ‘œ μ•Œλ €μ£ΌκΈ°μ— ν•΄κ²°ν•˜κΈ΄ μ‰¬μšΈ 수 μžˆμ§€λ§Œ,

쑴재 λ˜λŠ” μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” μš”μ†Œμ™€ λ©”μ„œλ“œλ“€μ— λŒ€ν•΄ μ•ˆμ „ν•˜κ²Œ μ ‘κ·Όν•  수 μžˆλ„λ‘ λ„μ™€μ£ΌλŠ” μ˜΅μ…”λ„ 체이닝 μ—°μ‚°μžλ₯Ό 톡해 더 μ‰½κ²Œ ν•΄κ²°ν•  수 μžˆλ‹€.

 

μ•„λž˜ μ½”λ“œμ—μ„œ spanμ•ˆμ˜ text값이 λͺ‡μ΄ λ‚˜μ˜¬μ§€ μ˜ˆμƒν•΄λ³΄μž.

import React from 'react'

const getNonEmptyCategories = (catrgories) => (
    categories.filter((category) => category.items > 0);
)

// categories = [ {items: 5, id: 0}, {items: 4, id: 0} ]
// index = 1
const App = ({ categories, index }) => {
    const filterCategory = getNonEmptyCategories(categories);
    
    const filterCategoryValue = filterCategory[index].items;
    
    return (
        <span>{filterCategoryValue}</span>
    )
}

export default App;

μœ„ μ½”λ“œλ₯Ό 보면 λ‹Ήμ—°νžˆ 4κ°€ λ‚˜μ˜¬ κ²ƒμœΌλ‘œ μ˜ˆμƒν•  수 μžˆλ‹€.

μ €λŸ° λ‹Ήμ—°ν•œ 것듀이 가끔씩 μ»΄ν¬λ„ŒνŠΈ 라이프 사이클에 따라  filterCategory[index]κ°€ undefinedλ₯Ό λ°˜ν™˜ν•΄
itemsκ°€ μ •μ˜λ˜μ§€ μ•Šμ•˜λ‹€λŠ” λ‚΄μš©μ˜ 500μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚¨λ‹€.

 

이미 μ„œλ²„λ‚˜ μ»΄ν¬λ„ŒνŠΈμ—μ„œ μ˜€λŠ” λ‚΄μš©λ“€μΈλ° 단지 사이클 차이둜 μ €λŸ° ν˜„μƒμ΄ λ°œμƒν•œλ‹€.

 

그럴 λ•Œ μ‚¬μš©μžλ“€μ΄ 많이 μ‚¬μš©ν•˜λŠ” 게 μ˜ˆμ™Έμ²˜λ¦¬λ‹€.

μ˜΅μ…”λ„ 체이닝 μ „μ—” μ‚¬μš©μžλ“€μ€ 단좕평가, 3ν•­ μ—°μ‚°μž 톡해 μ˜ˆμ™Έμ²˜λ¦¬λ₯Ό 많이 ν–ˆλ‹€.

import React from 'react'

const getNonEmptyCategories = (catrgories) => (
    categories.filter((category) => category.items > 0);
)

// categories = [ {items: 5, id: 0}, {items: 4, id: 0} ]
// index = 1
const App = ({ categories, index }) => {
    const filterCategory = getNonEmptyCategories(categories);
    
    //
    let filterCategoryValue = [];
    
    filterCategory[index] &&
    	filterCategoryValue = filterCategory[index].items
    
    // or
    
    const filterCategoryValue = filterCategory[index].items || [];
    
    // or
    
    const filterCategoryValue = filterCategory[index] ? filterCategory[index].items : [];
    
    
    return (
        <span>{filterCategoryValue}</span>
    )
}

export default App;

λ‹Ήμ—°νžˆ μœ„ 문법도 크게 λ¬Έμ œλŠ” μ—†μ§€λ§Œ 더 κ°„νŽΈν•˜κ²Œ μ“Έ 수 있게 μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ μ˜΅μ…”λ„ 체이닝을 κ°œλ°œν•΄μ€¬λ‹€.

 

μ˜΅μ…”λ„ μ²΄μ΄λ‹

μœ„μ—μ„œ μ„€λͺ…ν–ˆμ§€λ§Œ, 쑴재 λ˜λŠ” μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” μš”μ†Œμ™€ λ©”μ„œλ“œλ“€μ— λŒ€ν•΄ μ•ˆμ „ν•˜κ²Œ μ ‘κ·Όν•  수 μžˆλ„λ‘ λ„μ™€μ£ΌλŠ” μ˜΅μ…”λ„ 체이닝 μ—°μ‚°μžλ₯Ό 톡해 더 μ‰½κ²Œ ν•΄κ²°ν•  수 μžˆλ‹€.

μ‚¬μš© 방법은 κ·Έλƒ₯ μ•žμ— ?λ₯Ό λΆ™μ—¬μ£Όλ©΄ λœλ‹€.

 

그러면 값이 λˆ„λ½λ  κ²½μš°μ— μ˜΅μ…”λ„ 체이닝을 λΆ™μ—¬μ£Όλ©΄ ν”„λ‘œκ·Έλž¨μ˜ μ•ˆμ •μ„±μ„ 높여쀄 수 μžˆλ‹€.

 

import React from 'react'

const getNonEmptyCategories = (catrgories) => (
    categories.filter((category) => category.items > 0);
)

// categories = [ {items: 5, id: 0}, {items: 4, id: 0} ]
// index = 1
const App = ({ categories, index }) => {
    const filterCategory = getNonEmptyCategories(categories);
    
    const filterCategoryValue = filterCategory[index]?.items // μš”κΈ°

    return (
        <span>{filterCategoryValue}</span>
    )
}

export default App;

이러면 해결이 λœλ‹€.

μ˜΅μ…”λ„ 체이닝은 μ—¬κΈ°κΉŒμ§€ 보면 μž₯점만 μžˆλŠ” 것 κ°™μ§€λ§Œ 단점도 μ‘΄μž¬ν•œλ‹€.

좔후에 였λ₯˜λ₯Ό λ°œκ²¬ν•˜κΈ° 어렡기도 ν•˜κ³ , μ—λŸ¬ 디버깅 λ“± μΆ”ν›„ μœ μ§€λ³΄μˆ˜κ°€ 쒋지 μ•ŠμœΌλ―€λ‘œ λ‚¨μš©ν•˜μ§€ μ•ŠλŠ” 것이 μ€‘μš”ν•˜λ‹€.

 

쓰기보단 읽기(λ°°μ—΄, ν•¨μˆ˜, λ³€μˆ˜ λ“±λ“±)μ—μ„œ 주둜 μ‚¬μš©ν•œλ‹€λŠ” 것도 μ•Œμ•„λ‘μž!

728x90
λ°˜μ‘ν˜•