React-tags: μ—…λ°μ΄νŠΈ μ œμ•ˆ μ†Œν’ˆμ€ λ‹€μŒ μž…λ ₯(v6)κΉŒμ§€ μ˜΅μ…˜ λͺ©λ‘μ„ μ—…λ°μ΄νŠΈν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2020λ…„ 05μ›” 11일  Β·  10μ½”λ©˜νŠΈ  Β·  좜처: i-like-robots/react-tags

μ˜΅μ…˜ λͺ©λ‘μ€ onInput μ»€μŠ€ν…€ ν•Έλ“€λŸ¬ https://github.com/i-like-robots/react-tags/blob/6.0/lib/ReactTags.js#L130 λ°”λ‘œ λ‹€μŒμ— μ—…λ°μ΄νŠΈλ©λ‹ˆλ‹€
κ·ΈλŸ¬λ‚˜ onInput ν•Έλ“€λŸ¬ λ‚΄λΆ€μ—μ„œ μ„œλ²„λ₯Ό μΏΌλ¦¬ν•˜λ©΄ μ‹œκ°„μ΄ κ±Έλ¦½λ‹ˆλ‹€.
결과적으둜 μ˜΅μ…˜ λͺ©λ‘μ—λŠ” 항상 졜근 호좜이 μ•„λ‹Œ 이전 호좜의 μ œμ•ˆ λͺ©λ‘μ΄ ν¬ν•¨λ©λ‹ˆλ‹€.

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λ‚˜λŠ” 이것에 λŒ€ν•΄ λͺ‡ 뢄을 λ³΄λƒˆκ³  μ μ ˆν•œ μ†”λ£¨μ…˜μ„ 생각해 λƒˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. μ•„λž˜ μ• λ‹ˆλ©”μ΄μ…˜μ€ μ œμ•ˆ μ†Œν’ˆμ΄ λΉ„λ™κΈ°μ‹μœΌλ‘œ μ—…λ°μ΄νŠΈλ˜κ³  μ˜΅μ…˜ λͺ©λ‘μ΄ λ‹€λ₯Έ μž…λ ₯ 없이 μ—…λ°μ΄νŠΈλ˜λŠ” 것을 λ³΄μ—¬μ€λ‹ˆλ‹€.

update

λ³€κ²½ 사항은 맀우 κ°„λ‹¨ν•˜λ―€λ‘œ μ’€ 더 ν…ŒμŠ€νŠΈν•˜κ³  PR을 올릴 κ²ƒμž…λ‹ˆλ‹€.

λͺ¨λ“  10 λŒ“κΈ€

@yrikλ‹˜ , 데이터 κ°€μ Έμ˜€κΈ°λŠ” ꡬ성 μš”μ†Œμ—μ„œ μ œκ³΅ν•˜λŠ” 것이 μ•„λ‹ˆλΌ 직접 κ΅¬ν˜„ν•©λ‹ˆλ‹€. κ°œλ³„ κ΅¬ν˜„μ„ 디버그할 μˆ˜λŠ” μ—†μ§€λ§Œ λͺ‡ 가지 쑰언을 μ œκ³΅ν•˜κ²Œ λ˜μ–΄ κΈ°μ©λ‹ˆλ‹€.

#205의 μ˜ˆμ— 이어 ν‘œμ‹œν•΄μ•Ό ν•  것보닀 더 λ§Žμ€ μ œμ•ˆμ„ κ°€μ Έμ˜€λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ ν˜„μž¬ 6개의 μ œμ•ˆμ„ ν‘œμ‹œν•˜κ³  μžˆλ‹€λ©΄ μ„œλ²„μ—μ„œ 12 λ˜λŠ” 15λ₯Ό 가져와 λ³΄μ‹­μ‹œμ˜€. 이런 μ‹μœΌλ‘œ suggestionsFilter μ—λŠ” μƒˆ 데이터가 μˆ˜μ‹ λ  λ•ŒκΉŒμ§€ μ‚¬μš©ν•  κ΄€λ ¨ 데이터가 남아 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

λŒμ•„μ™€μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€!
쑰금 λ‹€λ₯Έ λ¬Έμ œμž…λ‹ˆλ‹€.
" λ§₯μ£Ό "λΌλŠ” 단어에 λŒ€ν•œ μžλ™ 완성이 μžˆλ‹€κ³  μƒμƒν•΄λ³΄μ‹­μ‹œμ˜€.

  1. μ œμ•ˆ λͺ©λ‘μ΄ λΉ„μ–΄ μžˆμŠ΅λ‹ˆλ‹€( [] )
  2. μ‚¬μš©μž μœ ν˜• " be " --> μ„œλ²„κ°€ [bee, beard, beetroot, beer]λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€(getOptions 호좜 ν›„ μ„œλ²„κ°€ 데이터λ₯Ό λ°˜ν™˜ν•˜λ―€λ‘œ μ˜΅μ…˜ λͺ©λ‘μ΄ μ—…λ°μ΄νŠΈλ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 아무 것도 ν‘œμ‹œλ˜μ§€ μ•ŠμŒ)
  3. μ‚¬μš©μž μœ ν˜• " bee " --> μ„œλ²„λŠ” [beet, beetroot, beer]λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. μš°λ¦¬λŠ” [beard, beard, beetroot, beer]λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€. μƒˆλ‘œμš΄ 데이터가 μ•„λ‹Œ 이전에 μ—…λ°μ΄νŠΈλœ 데이터λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€.
  4. μ‚¬μš©μž μœ ν˜• " beer " --> μ„œλ²„κ°€ [beer]λ₯Ό λ°˜ν™˜ν•˜κ³  [bee, beetroot, beer]λ₯Ό ν‘œμ‹œν•˜κ³  μƒˆλ‘œμš΄ 데이터가 μ•„λ‹Œ 이전에 μ—…λ°μ΄νŠΈλœ 데이터λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€.

onInput κ°€ async 이면 μž‘λ™ν•©λ‹ˆλ‹€. λ˜λŠ” μ‚¬μš©μž μ •μ˜ onInput μ—μ„œ const options = getOptions.call(this, query) λ₯Ό ν˜ΈμΆœν•˜λŠ” 방법이 μžˆλŠ” κ²½μš°μ—λ„ μž‘λ™ν•©λ‹ˆλ‹€.

μ•Œκ² μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ ν˜„μž¬ 쿼리와 μΌμΉ˜ν•˜μ§€ μ•ŠλŠ” μ œμ•ˆμ΄ ν‘œμ‹œλ  수 μžˆμŠ΅λ‹ˆλ‹€. 이것이 λ§žμŠ΅λ‹ˆκΉŒ?

이 예제 μ½”λ“œλ‘œ 문제λ₯Ό μž¬ν˜„ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€.

μ•Œκ² μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ ν˜„μž¬ 쿼리와 μΌμΉ˜ν•˜μ§€ μ•ŠλŠ” μ œμ•ˆμ΄ ν‘œμ‹œλ  수 μžˆμŠ΅λ‹ˆλ‹€. 이것이 λ§žμŠ΅λ‹ˆκΉŒ?

μ •ν™•νžˆ! 제 κ²½μš°μ—λŠ” 거의 항상 이전 쿼리의 κ²°κ³Όλ₯Ό λ³΄μ—¬μ€λ‹ˆλ‹€. 응닡이 λΈŒλΌμš°μ €μ— μΊμ‹œλ˜μ–΄ μ¦‰μ‹œ λ°˜ν™˜λ˜λŠ” κ²½μš°λŠ” μ œμ™Έν•©λ‹ˆλ‹€.

jsfiddle을 μ‚¬μš©ν•˜μ—¬ λ‹€μ‹œ λ§Œλ“€λ €κ³ ν–ˆμ§€λ§Œ libλ₯Ό μ œλŒ€λ‘œ μ—°κ²°ν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.
jsfiddle에 이 ν”ŒλŸ¬κ·ΈμΈμ˜ κΈ°λ³Έ μ˜ˆμ œκ°€ μžˆλŠ” 경우 μ„œλ²„ μΈ‘ μžλ™ μ™„μ„± 예제둜 ν™•μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ λ‚΄κ°€ v6을 μ‚¬μš©ν•˜κ³  있으며 κ·€ν•˜κ°€ 가지고 μžˆλŠ” μ˜ˆμ œλŠ” 이전 버전과 λΉ„μŠ·ν•˜λ‹€λŠ” 점에 μ£Όλͺ©ν•  κ°€μΉ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€.
"λ°˜μ‘ νƒœκ·Έ μžλ™ μ™„μ„±": "6.0.0-베타.5"

λ‚˜λŠ” 이 λ¬Έμ œκ°€ 졜근 및 ν–₯ν›„ λ²„μ „μ˜ React의 λ³€κ²½μœΌλ‘œ 인해 componentWillReceiveProps() λ₯Ό ν”Όν•˜λ €λŠ” λ°”λžŒμœΌλ‘œ v6에 λ„μž…λ˜μ—ˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. μƒˆ λ²„μ „μ—μ„œλŠ” μ œμ•ˆ μ†Œν’ˆ 변경을 μ„€λͺ…ν•˜μ§€ μ•ŠλŠ” 마운트 및 onInput μ—μ„œλ§Œ μ—…λ°μ΄νŠΈλ˜λ„λ‘ μ œμ•ˆμ„ λ¦¬νŒ©ν† λ§ν–ˆμŠ΅λ‹ˆλ‹€.

getDerivedStateFromProps() λ₯Ό μ‚¬μš©ν•˜μ—¬ ν•΄κ²°ν•  수 μžˆμ§€λ§Œ 이 μ ‘κ·Ό 방식은 λΆˆν•„μš”ν•œ λ Œλ”λ§μ„ λ°©μ§€ν•˜κΈ° μœ„ν•΄ μ•½κ°„μ˜ μ΅œμ ν™”κ°€ ν•„μš”ν•˜λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

  static getDerivedStateFromProps (props, state) {
    const options = getOptions(props, state)
    return { options }
  }

λ‚˜λŠ” 이것에 λŒ€ν•΄ λͺ‡ 뢄을 λ³΄λƒˆκ³  μ μ ˆν•œ μ†”λ£¨μ…˜μ„ 생각해 λƒˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. μ•„λž˜ μ• λ‹ˆλ©”μ΄μ…˜μ€ μ œμ•ˆ μ†Œν’ˆμ΄ λΉ„λ™κΈ°μ‹μœΌλ‘œ μ—…λ°μ΄νŠΈλ˜κ³  μ˜΅μ…˜ λͺ©λ‘μ΄ λ‹€λ₯Έ μž…λ ₯ 없이 μ—…λ°μ΄νŠΈλ˜λŠ” 것을 λ³΄μ—¬μ€λ‹ˆλ‹€.

update

λ³€κ²½ 사항은 맀우 κ°„λ‹¨ν•˜λ―€λ‘œ μ’€ 더 ν…ŒμŠ€νŠΈν•˜κ³  PR을 올릴 κ²ƒμž…λ‹ˆλ‹€.

useEffect μ˜΅μ…˜ 변경을 λͺ¨λ‹ˆν„°λ§ν•  수 μžˆμœΌλ―€λ‘œ 이λ₯Ό 잘 μ²˜λ¦¬ν•΄μ•Ό ν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

useEffect(() => {
  setOptions(getOptions(props, state))
}, [options]);

이 문제λ₯Ό ν•΄κ²°ν•΄μ•Ό ν•˜λŠ” v6.0.0-beta.6 λ₯Ό μΆœμ‹œν–ˆμŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰

κ΄€λ ¨ 문제

luciemac picture luciemac  Β·  7μ½”λ©˜νŠΈ

williamsidewalk picture williamsidewalk  Β·  4μ½”λ©˜νŠΈ

ekinalcar picture ekinalcar  Β·  10μ½”λ©˜νŠΈ

yrik picture yrik  Β·  4μ½”λ©˜νŠΈ

famouspotatoes picture famouspotatoes  Β·  5μ½”λ©˜νŠΈ