Redux: 질문 : Redux의 μ €μž₯μ†Œμ™€ React의 μƒνƒœ μ€‘μ—μ„œ μ„ νƒν•˜λŠ” 방법은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?

에 λ§Œλ“  2016λ…„ 01μ›” 27일  Β·  26μ½”λ©˜νŠΈ  Β·  좜처: reduxjs/redux

question

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

μ „μ—­ 적으둜 앱에 μ€‘μš”ν•˜μ§€ μ•Šκ³  λ³΅μž‘ν•œ λ°©μ‹μœΌλ‘œ λ³€κ²½λ˜μ§€ μ•ŠλŠ” μž„μ‹œ μƒνƒœμ— Reactλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 일뢀 UI μš”μ†Œμ˜ ν† κΈ€, 양식 μž…λ ₯ μƒνƒœ. μ „μ—­ 적으둜 μ€‘μš”ν•˜κ±°λ‚˜ λ³΅μž‘ν•œ λ°©μ‹μœΌλ‘œ λ³€ν˜• 된 μƒνƒœμ— Reduxλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ μΊμ‹œ 된 μ‚¬μš©μž λ˜λŠ” κ²Œμ‹œλ¬Ό μ΄ˆμ•ˆμ΄ μžˆμŠ΅λ‹ˆλ‹€.

λ•Œλ‘œλŠ” Redux μƒνƒœμ—μ„œ React μƒνƒœ (Redux에 무언가λ₯Ό μ €μž₯ν•˜λŠ” 것이 어색 해짐)둜 μ΄λ™ν•˜κ±°λ‚˜ λ‹€λ₯Έ 방법 (더 λ§Žμ€ ꡬ성 μš”μ†Œκ°€ λ‘œμ»¬μ΄μ—ˆλ˜ μƒνƒœμ— μ•‘μ„ΈμŠ€ν•΄μ•Όν•˜λŠ” 경우)을 원할 κ²ƒμž…λ‹ˆλ‹€.

κ²½ν—˜μ˜ 법칙은 덜 μ–΄μƒ‰ν•œ μΌμ„ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

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

μ „μ—­ 적으둜 앱에 μ€‘μš”ν•˜μ§€ μ•Šκ³  λ³΅μž‘ν•œ λ°©μ‹μœΌλ‘œ λ³€κ²½λ˜μ§€ μ•ŠλŠ” μž„μ‹œ μƒνƒœμ— Reactλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 일뢀 UI μš”μ†Œμ˜ ν† κΈ€, 양식 μž…λ ₯ μƒνƒœ. μ „μ—­ 적으둜 μ€‘μš”ν•˜κ±°λ‚˜ λ³΅μž‘ν•œ λ°©μ‹μœΌλ‘œ λ³€ν˜• 된 μƒνƒœμ— Reduxλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ μΊμ‹œ 된 μ‚¬μš©μž λ˜λŠ” κ²Œμ‹œλ¬Ό μ΄ˆμ•ˆμ΄ μžˆμŠ΅λ‹ˆλ‹€.

λ•Œλ‘œλŠ” Redux μƒνƒœμ—μ„œ React μƒνƒœ (Redux에 무언가λ₯Ό μ €μž₯ν•˜λŠ” 것이 어색 해짐)둜 μ΄λ™ν•˜κ±°λ‚˜ λ‹€λ₯Έ 방법 (더 λ§Žμ€ ꡬ성 μš”μ†Œκ°€ λ‘œμ»¬μ΄μ—ˆλ˜ μƒνƒœμ— μ•‘μ„ΈμŠ€ν•΄μ•Όν•˜λŠ” 경우)을 원할 κ²ƒμž…λ‹ˆλ‹€.

κ²½ν—˜μ˜ 법칙은 덜 μ–΄μƒ‰ν•œ μΌμ„ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

λ„€νŠΈμ›Œν¬ μš”μ²­μ„ 톡해 κ°€μ Έμ˜¨ λ°μ΄ν„°μ˜ 경우 μ„œλ²„ μΈ‘ λ Œλ”λ§μ„ μ§€μ›ν•˜κΈ° μœ„ν•΄ 항상 μ €μž₯μ†Œλ₯Ό μ‚¬μš©ν•˜μ‹­μ‹œμ˜€ (μ΅œμ’… λͺ©ν‘œλΌκ³  μƒκ°ν•˜λŠ” 경우). 그렇지 μ•ŠμœΌλ©΄ μž¬μˆ˜ν™”ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

두 개 μ΄μƒμ˜ μ»¨ν…Œμ΄λ„ˆμ—μ„œ ν•΄λ‹Ή μƒνƒœλ₯Ό μˆ˜μ‹ ν•˜λ €λ©΄ 맀μž₯에도 μžˆμ–΄μ•Όν•©λ‹ˆκΉŒ?

λ‚˜λŠ” μž„μ‹œμ™€ 영ꡬ의 ꡬ별에 λŒ€ν•΄ @gaeron κ³Ό λ™μ˜ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ €λŠ” μ‹€μ œλ‘œ 이것에 λŒ€ν•΄ μ„Έ 가지 λ²”μ£Όλ‘œ μƒκ°ν•©λ‹ˆλ‹€. ν•˜λ‚˜λŠ” κ·Έκ°€ μ΄μ•ΌκΈ°ν•˜λŠ” UI μƒνƒœ 이며 μ €λŠ” λ˜ν•œ μΌμ‹œμ μ΄λΌκ³  μƒκ°ν•©λ‹ˆλ‹€. 또 ν•˜λ‚˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ‹€μ œ 핡심 인 λΌμš°νŒ… μƒνƒœ μž…λ‹ˆλ‹€. λ‚˜λŠ” μ‚¬λžŒλ“€μ—κ²Œ μΉœμˆ™ν•˜κΈ° λ•Œλ¬Έμ— "λΌμš°νŒ…"μ΄λΌλŠ” μš©μ–΄λ₯Ό μ‚¬μš©ν•˜μ§€λ§Œ, λ°μŠ€ν¬νƒ‘, μ›Ή 및 λͺ¨λ°”일에 더 잘 μ μš©λ˜λŠ” κ²ƒμœΌλ‘œ μƒκ°ν•˜κΈ° λ•Œλ¬Έμ— 이것을 "보기 선택"μƒνƒœλ‘œ μΆ”μƒν™”ν•©λ‹ˆλ‹€.

이제 이것은 μ‚¬λžŒλ“€μ΄ λ³΄λŠ” 것을 κ²°μ •ν•˜κΈ° λ•Œλ¬Έμ— UI μƒνƒœλΌκ³  μ£Όμž₯ ν•  수 μžˆμŠ΅λ‹ˆλ‹€ (예λ₯Ό λ“€μ–΄ νƒ­μ˜ μƒνƒœμ™€ 맀우 μœ μ‚¬ 함). κ·ΈλŸ¬λ‚˜ λ‚˜λŠ” 두 가지 차이점을 λ³Έλ‹€. 첫 λ²ˆμ§ΈλŠ” μƒνƒœκ°€ μ§λ ¬ν™”λ˜μ–΄ (즉, URL둜) λ‹€λ₯Έ μ‚¬λžŒμ—κ²Œ μ „μ†‘λœλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. λ”°λΌμ„œ μ‚¬λžŒλ“€μ΄ νŠΉμ • UI μƒνƒœμ— λ°”λ‘œ 'λ”₯ 링크'ν•  수 μžˆλ„λ‘ν•˜λ €λ©΄ 경둜 μƒνƒœλ‘œ μ΄λ™ν•΄μ•Όν•©λ‹ˆλ‹€ . 두 λ²ˆμ§ΈλŠ” λŒ€λΆ€λΆ„μ˜ 경우 초기 경둜 μƒνƒœ λ˜λŠ” 경둜 λ³€κ²½μœΌλ‘œ 인해 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μƒνƒœκ°€ λ³€κ²½λ©λ‹ˆλ‹€ (예 : λ³Ό λ°μ΄ν„°λ‘œλ“œ). λ¬Όλ‘  UI의 μž‘μ—…μ€ λ™μΌν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ‚΄κ°€ λ§Œλ“œλŠ” 차이점은 경둜 μƒνƒœ 변경에 λŒ€ν•œ "μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 논리" λ₯Ό ν…ŒμŠ€νŠΈν•˜κΈ° μœ„ν•΄λ³΄κΈ° λ‚˜ λ Œλ”λ§μ—†μ΄ 경둜 μƒνƒœλ₯Ό κ°€μ§ˆ 수 μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. 뷰와 λ Œλ”λ§μ΄ κ΄€λ ¨ 될 ν•„μš”κ°€ μ—†κΈ° λ•Œλ¬Έμ— λΆ€λΆ„μ μœΌλ‘œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μƒνƒœ 인 IMHOκ°€λ©λ‹ˆλ‹€.

이것이 μƒνƒœ 관리λ₯Όμœ„ν•œ Redux λŒ€ React의 질문과 μ–΄λ–€ 관련이 μžˆμŠ΅λ‹ˆκΉŒ? μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μƒνƒœλŠ” Redux의 도메인이고 UI μƒνƒœλŠ” React의 λ„λ©”μΈμž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λΌμš°νŒ… μƒνƒœλŠ” (λ‚΄ 생각에) UI μƒνƒœλ‘œ λ³Ό 수 μžˆμ§€λ§Œ Reduxμ—μ„œ κ΄€λ¦¬ν•΄μ•Όν•©λ‹ˆλ‹€ (λ‚΄κ°€ μƒκ°ν•˜λŠ” μ΄μœ μ— λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ 포함 된 링크 μ°Έμ‘°).

λΆ„λͺ…νžˆ λ§ν•˜λ©΄ , μ›€μ§μ΄λŠ” 것에 λŒ€ν•œ

μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μƒνƒœλŠ” Redux의 도메인이고 UI μƒνƒœλŠ” React의 λ„λ©”μΈμž…λ‹ˆλ‹€.

λ‚˜λŠ” 이것을 μ£Όμž₯ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. Reactμ—μ„œ 일뢀 μ•± μƒνƒœλ₯Ό μœ μ§€ν•˜κ³  Reduxμ—μ„œ 일뢀 UI μƒνƒœλ₯Ό μœ μ§€ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 그듀이 λ„λ©”μΈμœΌλ‘œ λΆ„λ¦¬λ˜μ–΄μ•Όν•œλ‹€κ³  μƒκ°ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

Redux둜 앱을 λ§Œλ“œλŠ” 경우 μ œκ°€ μƒκ°ν•˜λŠ” 방식은 단일 μƒνƒœ 트리λ₯Ό μˆ˜μš©ν•©λ‹ˆλ‹€. 거기에 UI μƒνƒœλ„ λ„£μœΌμ‹­μ‹œμ˜€. κ·ΈλŸ¬λ‚˜ μ§€λ£¨ν•˜κ³  닡닡해지면 ꡬ성 μš”μ†Œμ— μƒνƒœλ₯Ό λ„£λŠ” 것을 λ‘λ €μ›Œν•˜μ§€ λ§ˆμ‹­μ‹œμ˜€. λ‚΄ μš”μ μ€ μ–΄μƒ‰ν•˜μ§€ μ•ŠλŠ” ν•œ 단일 μƒνƒœ 트리λ₯Ό μ‚¬μš©ν•˜κ³  λ³΅μž‘ν•˜κ²Œ λ§Œλ“€μ§€ μ•Šκ³  λ‹¨μˆœν™” ν•  λ•Œλ§Œ μ‚¬μš©ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. 이것이 μœ μΌν•œ μ§€μΉ¨μž…λ‹ˆλ‹€.

λ¨Όμ € @gaearon 의 μž…μ— 단어λ₯Ό 넣을 생각은 μ—†μ—ˆμŠ΅λ‹ˆλ‹€. μ£„μ†‘ν•©λ‹ˆλ‹€.

λ‘˜μ§Έ, @gaearon에 μ „μ μœΌλ‘œ λ™μ˜ν•©λ‹ˆλ‹€. μ €λŠ” λ˜ν•œ 단일 μƒνƒœ 트리 μ ‘κ·Ό 방식을 ꡳ게 λ―ΏμŠ΅λ‹ˆλ‹€. UI μƒνƒœμ— λŒ€ν•΄ 이야기 ν•  λ•Œ, μ‘μš© ν”„λ‘œκ·Έλž¨ μƒνƒœμ™€λŠ” 관련이 없을 μˆ˜μžˆλŠ” μ‚¬μ†Œν•œ 것 (예 : μ„ νƒν•œ ν˜„μž¬ νƒ­)이 μžˆμ—ˆμŠ΅λ‹ˆλ‹€ (μ •ν™•νžˆ

제 μž…μž₯을 λͺ…ν™•νžˆν•˜κ² μŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 경둜 μƒνƒœλ₯Ό ν¬ν•¨ν•˜μ—¬ 거의 λͺ¨λ“  것이 Redux에 μžˆμ–΄μ•Ό ν•œλ‹€λŠ” 데 λ™μ˜ν•©λ‹ˆλ‹€ (λ‚΄κ°€ Redux와 TypeScriptλ₯Ό μ‚¬μš©ν•˜μ—¬ TodoMVC κ΅¬ν˜„ μ—μ„œν–ˆλ˜ κ²ƒμ²˜λŸΌ. λ‚˜λŠ” ꡬ체적으둜 경둜 μƒνƒœλ₯Ό μ–ΈκΈ‰ν–ˆκ³  그것을 κ΅¬λ³„ν–ˆμŠ΅λ‹ˆλ‹€. κ΅¬ν˜„) ν™•μ‹€νžˆ Redux에 μ†ν•˜κ³  (그리고 λ Œλ”λ§μ— μ „ν˜€ μ—°κ²°λ˜μ–΄μ„œλŠ” μ•ˆ 됨) ν™•μ‹€νžˆ "UI μƒνƒœ"κ°€ μ•„λ‹™λ‹ˆλ‹€.

React ꡬ성 μš”μ†Œμ˜ 경우 μƒνƒœλ₯Ό 거의 μ‚¬μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 무엇을 λ Œλ”λ§ν• μ§€μ— λŒ€ν•œ 정보λ₯Ό μ–»κ³  λ‚΄ μ»΄ν¬λ„ŒνŠΈ μ™ΈλΆ€μ˜ 변경을 νŠΈλ¦¬κ±°ν•˜κΈ° μœ„ν•΄ 호좜 ν•  μˆ˜μžˆλŠ” ν΄λ‘œμ €λ₯Ό μ–»κΈ° μœ„ν•΄ propsλ₯Ό μ‚¬μš©ν•˜λŠ” 것을 μ„ ν˜Έν•©λ‹ˆλ‹€. 삢을 νŽΈν•˜κ²Œν•˜κΈ° μœ„ν•΄ ꡬ성 μš”μ†Œμ— μƒνƒœλ₯Ό λ„μž…ν•˜λŠ” κ²½μš°κ°€ λ“œλ¬Όμ§€λ§Œ ν”Όν•˜λ €κ³ ν•©λ‹ˆλ‹€. λ‚˜λŠ” 그것이 일을 λͺ…ν™•νžˆν•˜κΈ°λ₯Ό λ°”λžλ‹ˆλ‹€.

μ €λŠ”μ΄ 질문이 정말 주관적이고 λ³΅μž‘ν•˜λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. κ·Έλž˜μ„œ 였늘 저희 νŒ€κ³Ό ν•¨κ»˜ μ–΄λ €μš΄ 결정을 λ‚΄ λ ΈμŠ΅λ‹ˆλ‹€. μ‹ κ²½ 쓰지 λ§ˆμ„Έμš”.

  • Redux에 μ—°κ²°λ˜μ–΄μžˆλŠ” μž¬μ‚¬μš© λΆˆκ°€λŠ₯ν•œ μ»¨ν…Œμ΄λ„ˆμ˜ 경우 λͺ¨λ“  것을 Redux μ €μž₯μ†Œμ— λ„£μŠ΅λ‹ˆλ‹€. 심지어 λͺ¨λ‹¬μ΄ μ—΄λ €μžˆλŠ” 것과 같은 μž‘μ€ UI μƒνƒœλΌλ„ 더 이상 this.setState μ‚¬μš©ν•˜μ§€ λ§ˆμ‹­μ‹œμ˜€.
  • Redux와 κ΄€λ ¨μ΄μ—†λŠ” μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ»΄ν¬λ„ŒνŠΈμ˜ 경우 React stateλ₯Ό μ‚¬μš©ν•˜μ‹­μ‹œμ˜€.

이제 μš°λ¦¬λŠ” μž‘μ€ UI μƒνƒœλ₯Ό κ΄€λ¦¬ν•˜λŠ” 일을 덜 μ§€λ£¨ν•˜κ²Œ λ§Œλ“€κΈ° μœ„ν•΄ λͺ‡ 가지 λ„μš°λ―Έλ₯Ό κ΅¬ν˜„ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

@gaearon @ lionng429 @xogeny 이 μ ‘κ·Ό 방식에 λŒ€ν•΄ 생각할 μˆ˜μžˆλŠ” 단점이 μžˆμŠ΅λ‹ˆκΉŒ?

@inetfuture TypeScriptλ₯Ό μ‚¬μš©ν•˜κ³  있고 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μƒνƒœμ— λŒ€ν•œ μœ ν˜•μ„ μ™„μ „νžˆ μ •μ˜ν•˜κΈ° λ•Œλ¬Έμ— μ• ν”Œλ¦¬μΌ€μ΄μ…˜ (redux) μƒνƒœμ— λŒ€ν•΄ μ•½κ°„ λΉ„μ°Έν•œ κ²½ν–₯이 μžˆμŠ΅λ‹ˆλ‹€. 즉, λ Œλ”λ§μ—μ„œ λͺ¨λ“  μƒνƒœ μ‘°μž‘μ„ λΆ„λ¦¬ν•˜κΈ° μœ„ν•΄ ꡬ성 μš”μ†Œ 라이브러리λ₯Ό κ°œλ°œν•  λ•Œ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€ (μžμ„Έν•œ λ‚΄μš©μ€ 이전 μ£Όμ„μ˜ 링크 μ°Έμ‘°). 이것은 μ‚¬μ†Œν•˜μ§€ μ•Šμ€ 일반적인 ꡬ성 μš”μ†Œμ— λŒ€ν•΄μ„œλ„ μ™„μ „νžˆ μƒνƒœλ₯Ό μ™ΈλΆ€ν™”ν•œλ‹€λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. λ‚˜λŠ” 일반적으둜 λͺ¨λ“  것을 props (μƒνƒœ μ‘°μž‘μ„μœ„ν•œ μƒνƒœμ™€ ν΄λ‘œμ € λͺ¨λ‘)λ₯Ό 톡해 μ „λ‹¬ν•©λ‹ˆλ‹€. μ΄λ ‡κ²Œν•˜λ©΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μƒνƒœμ— μ‰½κ²Œ μ—°κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄κ²ƒμ˜ μΌλΆ€λŠ” μ˜μ‹¬ ν•  여지없이 TypeScriptλ₯Ό μ‚¬μš©ν•˜λŠ” 인곡물이며 combineReducers 및 connect λ₯Ό μ‚¬μš©ν•˜μ—¬ 물건을 μ—°κ²° (μ΅œμ†Œν•œ μœ ν˜• μ œμ•½ 쑰건을 μœ μ§€)ν•˜λŠ” 데 μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ 이것은 μ•„λ§ˆλ„ λŒ€ν‘œμ μΈ 관점이 μ•„λ‹™λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ‚˜λŠ” 당신이 "λͺ¨λ“  것을 Redux μŠ€ν† μ–΄μ— λ„£μ–΄ 라"라고 λ§ν•˜λŠ” 이유λ₯Ό 말할 κ²ƒμž…λ‹ˆλ‹€. λ‚˜λŠ” 당신이 μƒνƒœμ˜ λΆ€μ—Œ μ‹±ν¬λŒ€κ°€ 될 것이라고 κ±±μ •ν•  κ²ƒμž…λ‹ˆλ‹€. TypeScriptλ₯Ό μ‚¬μš©ν•œλ‹€λŠ” 것은 μ‘μš© ν”„λ‘œκ·Έλž¨ μƒνƒœλ₯Ό ν™•μž₯ν•˜λŠ” 데 μ•½κ°„μ˜ λ…Έλ ₯이 ν•„μš”ν•˜λ‹€λŠ” 사싀이 "μ •λ§μ΄κ²Œ ν•„μš”ν•œκ°€μš”?"λΌλŠ” 결정을 λ‚΄ 리도둝 κ°•μš”ν•˜κΈ° λ•Œλ¬Έμ— λ°˜λ“œμ‹œ λ‚˜μœ 것은 μ•„λ‹™λ‹ˆλ‹€. 물건을 μŒ“μ•„ λ‘λŠ” λŒ€μ‹ .

λŒ€μ•ˆμœΌλ‘œ 둜컬 ꡬ성 μš”μ†Œ μƒνƒœλŠ” λΉ λ₯Έ μ—…λ°μ΄νŠΈ μ‹œκ°„μ΄ ν•„μš”ν•œ μ œμ–΄ 된 μž…λ ₯에 유용 ν• λΏλ§Œ μ•„λ‹ˆλΌ νŠΈλ¦¬κ±°λ˜λŠ” μ‹€μ œ μž‘μ—… 수λ₯Ό 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€. ν˜„μž¬ ν”„λ‘œν†  νƒ€μž…μ—μ„œλŠ” ν˜„μž¬ νŽΈμ§‘μ€‘μΈ ν•­λͺ©μ„ μ†Œν’ˆμœΌλ‘œλ°›λŠ” 양식 νŽΈμ§‘ HOCλ₯Ό κ΅¬μ„±ν–ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ λ³€κ²½λœ ν•„λ“œλ₯Ό ν•΄λ‹Ή μƒνƒœλ‘œ μ €μž₯ ν•œ λ‹€μŒ κ²°ν•© 된 둜컬 WIP λ³€κ²½μœΌλ‘œ λ”” λ°”μš΄μŠ€ 된 "EDIT_ITEM_ATTRIBUTE"μž‘μ—… μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜μ—¬ 양식 μž…λ ₯ λ³€κ²½ 이벀트λ₯Ό μ²˜λ¦¬ν•©λ‹ˆλ‹€. κ·Έ κ²°κ³Ό 양식 자체 만 λ‹€μ‹œ λ Œλ”λ§λ˜κ³  훨씬 적은 수의 μž‘μ—…μ΄ 트리거되기 λ•Œλ¬Έμ— 양식 ν•„λ“œκ°€ μ¦‰μ‹œ μ—…λ°μ΄νŠΈλ©λ‹ˆλ‹€ (예 : 'A'λ₯Ό λͺ‡ 초 λ™μ•ˆ λˆ„λ₯΄κ³  있으면 'AAAAAAAAAAAA'κ°’λ§Œ 'A', 'AA'등이 μ•„λ‹Œ μ•‘μ…˜μœΌλ‘œ μ „μ†‘λ©λ‹ˆλ‹€.

λˆ„κ΅°κ°€ 관심이 μžˆλ‹€λ©΄ https://gist.github.com/markerikson/554cab15d83fd994dfab μ—μ„œ μš”μ μœΌλ‘œ HOCλ₯Ό μ–»μ—ˆμŠ΅λ‹ˆλ‹€.

μ–΄μ¨Œλ“  μš”μ μ€ ꡬ성 μš”μ†Œ μƒνƒœμ™€ μ €μž₯μ†Œ μƒνƒœ λͺ¨λ‘ μš©λ„κ°€ μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. μ‹€μ œ μ‚¬μš© 사둀λ₯Ό κ³ λ €ν•΄μ•Όν•©λ‹ˆλ‹€.

μž¬μ‚¬μš© κ°€λŠ₯ν•œ ꡬ성 μš”μ†Œμ˜ 경우 μΆ©λΆ„νžˆ 크고 λ³΅μž‘ν•˜λ‹€λ©΄ 주둜 좔적 μ„± 및 ν…ŒμŠ€νŠΈ 용 μž¬μƒμ„ μœ„ν•΄ Redux에 μƒνƒœλ₯Ό μœ μ§€ν•˜λŠ” 것이 λ―Έλž˜μ— λŒ€λΉ„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜μ΄ μ½”λ“œ μž¬μ‚¬μš©μ΄ μ •ν™•νžˆ μ–΄λ–»κ²Œ μ„€κ³„λ˜μ–΄μ•Όν•˜λŠ”μ§€μ— λŒ€ν•΄μ„œλŠ” μ—¬μ „νžˆ μ•½κ°„μ˜ 의문이 μžˆμŠ΅λ‹ˆλ‹€ (μ»΄ν¬λ„ŒνŠΈ, μ•‘μ…˜, λ¦¬λ“€μ„œ).

우리의 μ‘μš© ν”„λ‘œκ·Έλž¨μ—μ„œ μš°λ¦¬λŠ” μ—°κ²°κ³Ό 같은 μŠ€νƒ€μΌλ‘œμ΄ 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. https://github.com/Babo-Ltd/redux-state

Redux에 μƒνƒœλ₯Ό μ €μž₯ν•˜λŠ” 것이 μ–΄μƒ‰ν•œ κ²½μš°λŠ” 거의 μ—†μ—ˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 그것이 μ œκ³΅ν•˜λŠ” νž˜μ„ μ’‹μ•„ν•˜κ³ , ν•„μš”ν•  λ•Œ λ‹€λ₯Έ ꡬ성 μš”μ†Œμ™€ μƒν˜Έ μž‘μš©ν•˜λ„λ‘ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

어색 ν•  μˆ˜μžˆλŠ” μœ μΌν•œ 생각은 폼 μš”μ†Œμ˜ μƒνƒœλ₯Ό μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ™œλƒν•˜λ©΄ 그것듀이 λ„ˆλ¬΄ λ§Žμ„ 수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. 이 경우 redux-form κ³Ό 같은 라이브러리λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

λ‚΄ μš”μ μ€ μ–΄μƒ‰ν•˜μ§€ μ•ŠλŠ” ν•œ 단일 μƒνƒœ 트리λ₯Ό μ‚¬μš©ν•˜κ³  λ³΅μž‘ν•˜κ²Œ λ§Œλ“€μ§€ μ•Šκ³  λ‹¨μˆœν™” ν•  λ•Œλ§Œ μ‚¬μš©ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. 그게 μœ μΌν•œ μ§€μΉ¨μž…λ‹ˆλ‹€

@gaearon 이

@idavollen λͺ‡ 가지 쀄 수 μžˆμŠ΅λ‹ˆλ‹€.

  • λ“œλ‘­ λ‹€μš΄ μ—΄κΈ° / λ‹«κΈ° μƒνƒœ, 그렇지 μ•ŠμœΌλ©΄ μƒμ μ˜ λͺ¨λ“  λ“œλ‘­ λ‹€μš΄ ꡬ성 μš”μ†Œλ₯Ό μΆ”μ ν•΄μ•Όν•©λ‹ˆλ‹€.
  • <input> 변경을 λ”” λ°”μš΄μ‹± ν•  λ•Œ μƒνƒœλ₯Ό μ‚¬μš©ν•˜μ—¬ 값을 μ¦‰μ‹œ μ—…λ°μ΄νŠΈν•˜κ³  (λ‹€λ₯Έ ꡬ성 μš”μ†Œκ°€ λΆˆν•„μš”ν•˜κ²Œ λ‹€μ‹œ λ Œλ”λ§ ν•  μœ„ν—˜μ΄ μ—†μŒ) λ”” λ°”μš΄μŠ€ 된 λ°©μ‹μœΌλ‘œ μŠ€ν† μ–΄λ₯Ό μ—…λ°μ΄νŠΈ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

기본적으둜 λ‹€λ₯Έ ꡬ성 μš”μ†Œμ— 영ν–₯을주지 μ•ŠλŠ” μƒνƒœμ— μ‚¬μš©ν•΄μ•Όν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ κ³ λ €ν•΄μ•Ό ν•  μ„Έ 번째 상황이 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μ•žμ— 체크 λ°•μŠ€κ°€ 있고 제좜 λ²„νŠΌμ΄μžˆλŠ” μ—¬λŸ¬ μ€„λ‘œ κ΅¬μ„±λœ 양식 (λ Œλ”λ§ λ©”μ„œλ“œμ—μ„œ λΉ„μš©μ΄ 많이 λ“œλŠ” λ°˜μ‘ μ»¨ν…Œμ΄λ„ˆ ꡬ성 μš”μ†Œ)이 μžˆμŠ΅λ‹ˆλ‹€. 제좜 λ²„νŠΌμ„ ν΄λ¦­ν•˜λ©΄ 체크 λ°•μŠ€κ°€ 체크 된 라인을 폼에 μ œμΆœν•΄μ•Όν•©λ‹ˆλ‹€. 즉, μ‚¬μš©μžκ°€ ν† κΈ€ ν•  λ•Œ 폼을 μ œμΆœν•˜κΈ° μ „ κ°œλ³„ 체크 λ°•μŠ€μ˜ μΌμ‹œμ μΈ μƒνƒœλŠ” μ€‘μš”ν•˜μ§€ μ•ŠμœΌλ©° μ»΄ν¬λ„ŒνŠΈ μƒνƒœλ‘œ μ·¨κΈ‰ν•΄μ„œλŠ” μ•ˆλ˜λ©° 체크 λ°•μŠ€ ν† κΈ€λ‘œ 인해 λ°œμƒν•˜μ§€ μ•Šμ•„μ•Όν•©λ‹ˆλ‹€. render ()λ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€.

당뢄간은 ν™•μΈλž€ μƒνƒœλ₯Ό μ‘μš© ν”„λ‘œκ·Έλž¨ μƒνƒœ 원 μžλ‚˜ 둜컬 ꡬ성 μš”μ†Œ μƒνƒœ, 즉 ν™•μΈλž€μ„ ν† κΈ€ν•˜λŠ” λ™μ•ˆ λΆˆν•„μš”ν•œ render () ν˜ΈμΆœμ„ ν”Όν•˜κΈ° μœ„ν•΄ 폼 λ°˜μ‘ ꡬ성 μš”μ†Œμ— 넣지 μ•Šμ•˜μŠ΅λ‹ˆλ‹€. μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λŠ” 체크 λ°•μŠ€λ₯Ό μœ μ§€ν•˜λŠ” 것보닀 μ„ ν˜Έλ˜μ§€λ§Œ λ°˜μ‘ νŒ¨ν„΄μ— μœ„λ°°λ©λ‹ˆλ‹€.

이 경우 μ΄λŸ¬ν•œ ν™•μΈλž€ μƒνƒœλ₯Ό κ΄€λ¦¬ν•˜λŠ” κ°€μž₯ 쒋은 방법이 무엇인지 κΆκΈˆν•©λ‹ˆλ‹€.

@idavollen 이 ν™•μΈλž€μ€ μ œμ–΄λ˜μ§€ μ•ŠμŠ΅λ‹ˆκΉŒ? 그렇지 μ•Šμ€ 경우 μ–΄μ¨Œλ“  λ‹€μ‹œ λ Œλ”λ§ν•˜λ―€λ‘œ ꡬ성 μš”μ†Œμ˜ μƒνƒœμ—μ„œ μ„ νƒλœ ν•­λͺ©μ„ μΆ”μ ν•˜κ³ μ΄λ₯Ό μ‚¬μš©ν•˜μ—¬ μ œμΆœν•  데이터 뢀뢄을 선택할 수 μžˆμŠ΅λ‹ˆλ‹€.

ReduxλŠ” ꡬ성 μš”μ†Œμ˜ μƒνƒœμ— λΉ„ν•΄ μ–Όλ§ˆλ‚˜ λΉ λ¦…λ‹ˆκΉŒ? μ‹€μ œ μ΄λ²€νŠΈμ™€ λ Œλ”λ§ ν”„λ‘œμ„ΈμŠ€ μ‚¬μ΄μ˜ 타이밍 μΈ‘λ©΄μ—μ„œ 정말 합리적인 UI μ†Œν’ˆμ„ μœ„ν•΄ Reduxλ₯Ό μ‚¬μš©ν•΄μ•Όν•©λ‹ˆκΉŒ? ꡬ성 μš”μ†Œ μƒνƒœλ₯Ό μ‚¬μš©ν•˜λ €λ©΄ κ·Έλ ‡κ²Œ κ°„λ‹¨ν•˜μ§€ μ•Šμ€ μ˜μ‚¬ μ†Œν†΅μ΄ 많이 ν•„μš”ν•œ λ³΅μž‘ν•œ 상황이 μžˆμŠ΅λ‹ˆλ‹€. 이 λ¬Έμ œμ— λŒ€ν•œ 도움을 μ£Όμ‹œλ©΄ κ°μ‚¬ν•˜κ² μŠ΅λ‹ˆλ‹€.

@tiberiumaxim λ‚΄ κ²½ν—˜μƒ (μ €λŠ” 슀마트 TV와 같은 μ €μ „λ ₯ μž₯μΉ˜μ—μ„œ μ‹€ν–‰λ˜λŠ” react 및 redux둜 앱을 κ°œλ°œν•©λ‹ˆλ‹€). λŒ€λΆ€λΆ„μ˜ 경우 ꡬ성 μš”μ†Œ μƒνƒœλ₯Ό μ—…λ°μ΄νŠΈν•˜λŠ” 것이 더 μ„±λŠ₯이 쒋을 κ²ƒμž…λ‹ˆλ‹€. κ·Έ μ΄μœ λŠ” λ°œμƒν•΄μ•Όν•˜λŠ” 차이가 더 μž‘μ€ 데이터 μ„ΈνŠΈμ— 있고 λ””μŠ€νŒ¨μΉ˜κ°€ λ°œμƒν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. ꡬ성 μš”μ†Œ λ˜λŠ” μžμ‹ 만 ν•΄λ‹Ή μƒνƒœμ— μ•‘μ„ΈμŠ€ν•΄μ•Όν•˜λŠ” 경우 둜컬 ꡬ성 μš”μ†Œ μƒνƒœλ₯Ό κ³ μˆ˜ν•˜λŠ” 것이 더 μ’‹μœΌλ©° μ΄λŠ” μ’…μ’… UI κ΄€λ ¨ μƒνƒœμ˜ κ²½μš°μ΄μ§€λ§Œ νŠΉμ • μ§€μ μ—μ„œ ν•΄λ‹Ή 데이터λ₯Ό redux μ €μž₯μ†Œμ— μœ μ§€ν•΄μ•Όν•˜λŠ” 경우- 둜컬 (μ»΄ν¬λ„ŒνŠΈ) μƒνƒœμ™€ κΈ€λ‘œλ²Œ (redux) μƒνƒœμ˜ 쑰합을 μ‚¬μš©ν•΄μ•Ό ν•  수 있으며 μ •ν™•ν•œ μ‹œκ°„ (예 : μ‚¬μš©μžκ°€ νŽ˜μ΄μ§€μ—μ„œ λ²—μ–΄λ‚  λ•Œ)에 ν•΄λ‹Ή 데이터λ₯Ό redux μ €μž₯μ†Œμ— μœ μ§€ν•΄μ•Όν•©λ‹ˆλ‹€. νŠΉμ • 사건에 λŒ€ν•΄ μ’€ 더 μ„€λͺ…ν•΄ μ£Όμ‹œλ©΄ 더 μžμ„Έν•œ 정보λ₯Ό λ“œλ¦΄ 수 μžˆμŠ΅λ‹ˆλ‹€

Redux에 λ“€μ–΄κ°€λŠ” μƒνƒœμ™€ ꡬ성 μš”μ†Œμ— λŒ€ν•΄ 둜컬둜 μœ μ§€λ˜λŠ” 것은 μ‚¬μš©μžκ°€ κ²°μ •ν•©λ‹ˆλ‹€. http://redux.js.org/docs/faq/OrganizingState.html#organizing -state-only-redux-state 및 http://redux.js.org/docs/faq/Performanceλ₯Ό 톡해 읽을 수 html # performance -scaling을 μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

@deowk μ„±λŠ₯ λ¬Έμ œμ— λŒ€ν•œ 지식을 κ³΅μœ ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. 저도 λ§ˆμ°¬κ°€μ§€λΌκ³  μƒκ°ν–ˆμ§€λ§Œ 확인이 ν•„μš”ν–ˆμŠ΅λ‹ˆλ‹€.
λ˜ν•œ @markerikson 링크에 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€. λ‹€μ‹œ ν•œ 번 μ‚΄νŽ΄ λ³΄κ² μŠ΅λ‹ˆλ‹€.

λˆ„κ΅°κ°€ λͺ…μ‹œ 적으둜 μ–ΈκΈ‰ν–ˆλŠ”μ§€ ν™•μ‹€ν•˜μ§€ μ•Šμ§€λ§Œ 둜컬 ꡬ성 μš”μ†Œ μƒνƒœλŠ” Reduxμ—μ„œλ„ 관리 ν•  수 β€‹β€‹μžˆμŠ΅λ‹ˆλ‹€. ꡬ성 μš”μ†Œ μƒμ„±μžμ—μ„œ λ°”λ‘œ 상점을 λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. 이 둜컬 μ €μž₯μ†ŒλŠ”μ΄ ꡬ성 μš”μ†Œμ˜ μƒνƒœλ₯Ό ν¬ν•¨ν•˜κ³ μ΄ ꡬ성 μš”μ†Œμ™€ κ΄€λ ¨λœ μž‘μ—…μ„ μ²˜λ¦¬ν•©λ‹ˆλ‹€ (및이 μ €μž₯μ†Œμ˜ dispatch ν•¨μˆ˜ λ˜λŠ” ν•΄λ‹Ή dispatch ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” μ½œλ°±μ„ μ „λ‹¬ν•˜μ—¬ ν•΄λ‹Ή ν•˜μœ„ ν•­λͺ©). .

이 μ•„ν‚€ν…μ²˜λŠ” μˆ˜λ™μœΌλ‘œ κ΅¬ν˜„ν•˜κ±°λ‚˜ redux-fractal, redux-ui λ“±κ³Ό 같은 일뢀 라이브러리λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ˜λŠ” Dan이 μ§€μ ν–ˆλ“―μ΄ ꡬ성 μš”μ†Œμ˜ μƒνƒœλ₯Ό μ—…λ°μ΄νŠΈν•˜λŠ” 감속기 μŠ€νƒ€μΌμ˜ μ ‘κ·Ό 방식을 κ΅¬ν˜„ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€! https://twitter.com/dan_abramov/status/736310245945933824 μ°Έμ‘°

ν™œλ™ ν‘œμ‹œκΈ° 및 λͺ¨λ‹¬ μ—΄κΈ° λ˜λŠ” 닫기와 같은 UI μƒνƒœλ₯Ό μ €μž₯ν•  μœ„μΉ˜λ₯Ό μ•Œκ³  μ‹ΆμŠ΅λ‹ˆλ‹€. setStateλ₯Ό μ‚¬μš©ν•˜λ©΄ λ°˜μ‘ ꡬ성 μš”μ†Œμ˜ λ‹¨μœ„ ν…ŒμŠ€νŠΈμ— λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆκΉŒ?

@ akshay2604 : λ‹€μ‹œ, 그것은 λ‹Ήμ‹ μ—κ²Œ 달렀 μžˆμŠ΅λ‹ˆλ‹€. 이 μŠ€λ ˆλ“œμ˜ 이전 λŒ“κΈ€μ— κ²Œμ‹œ ν•œ 링크λ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€. 특히 ꡬ성 μš”μ†Œλ₯Ό ν…ŒμŠ€νŠΈν•˜λŠ” 데 λ„μ›€μ΄λ˜λŠ” Enzyme 라이브러리λ₯Ό μ‚¬μš©ν•˜λŠ” 경우 ꡬ성 μš”μ†Œλ₯Ό ν…ŒμŠ€νŠΈν•˜λŠ” λ™μ•ˆ setState λ₯Ό ν™•μ‹€νžˆ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

제 생각을 κ³΅μœ ν•˜κ² μŠ΅λ‹ˆλ‹€.

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μž…λ ₯ / 좜λ ₯κ³Ό κ΄€λ ¨λ˜λŠ” 방식에 따라 μƒνƒœλ₯Ό 3 가지 λ²”μ£Όλ‘œ λΆ„λ₯˜ν•©λ‹ˆλ‹€.

  • "μΊμ‹œ": 영ꡬ λ°μ΄ν„°μ˜ 미러 μƒνƒœμž…λ‹ˆλ‹€. 예:
{ "todos": [{ id: 1, title: "title" }, { id: 2, title: "title" }] }
  • "λ³€κ²½": 영ꡬ 데이터에 λŒ€ν•œ 보λ₯˜μ€‘인 변경을 μ„€λͺ…ν•˜λŠ” μƒνƒœμž…λ‹ˆλ‹€. 예:
{ "changeTodo": { title: "title", action: "add", done: false },
{ id: 1, title: "changed title", action: "modify", done: true }, { id: 2, action: "delete" } }
  • "view": ν˜„μž¬ 필터링, μ •λ ¬ λ“±κ³Ό ​​같은보기 μ˜΅μ…˜μ„ μ „λ‹¬ν•˜λŠ” μƒνƒœμž…λ‹ˆλ‹€. 예 :
{ "displayOptions": { searchTerm: "title", sort: ["title", "desc"], filter: "done=false" } }

cache κ³Ό changes ν˜Όν•©ν•˜μ§€ μ•Šκ³  cache κ³Ό view ν˜Όν•©ν•˜μ§€ μ•ŠμœΌλ©° view κ³Ό (와) ν˜Όν•©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. changes

λ¬Όλ‘  단일 λ°˜μ‘ ꡬ성 μš”μ†Œμ— ν‘œμ‹œν•˜λ €λ©΄ μ–΄λ–»κ²Œ λ“  λ³‘ν•©ν•΄μ•Όν•©λ‹ˆλ‹€. λ”°λΌμ„œ "병합 된"κ°œμ²΄λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

{ "todos": [{id: undefined, title: "title", done: false }, { id: 1, title: "changed title" }] }

κ·ΈλŸ¬λ‚˜ μ΄λŠ” μƒνƒœκ°€ μ•„λ‹ˆλΌ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 둜직 의 κ²°κ³Όμž…λ‹ˆλ‹€. λ”°λΌμ„œ 어디에도 λ³΄κ΄€ν•΄μ„œλŠ” μ•ˆλ©λ‹ˆλ‹€.
이 병합 된 μƒνƒœλ₯Ό μ„ νƒκΈ°μ—μ„œ μΊμ‹œ ν•  수 있고, μ €μž₯μ†Œμ—μ„œ μΊμ‹œ ν•  수 있으며, ꡬ성 μš”μ†Œμ— μΊμ‹œ ν•  수 μžˆμ§€λ§Œ "μƒνƒœ"κ°€ μ•„λ‹ˆλ©° μ€‘μš”ν•˜μ§€ μ•ŠμœΌλ©° μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 논리 ν•¨μˆ˜λ₯Ό 3 개의 μƒνƒœ 뢀뢄에 λͺ¨λ‘ μ‰½κ²Œ λ‹€μ‹œ 적용 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 병합 된 μƒνƒœλ₯Ό λ‹€μ‹œ μ–»μŠ΅λ‹ˆλ‹€. 이것이 λ°”λ‘œ κΈ°λŠ₯적 μ ‘κ·Ό λ°©μ‹μž…λ‹ˆλ‹€.

Redux κ΄€λ¦¬μžλŠ” "μ‘μš© ν”„λ‘œκ·Έλž¨ λ‘œμ§μ„ μ—¬λŸ¬ λ¦¬λ“€μ„œμ™€ μ—¬λŸ¬ 이벀트둜 κ΅¬ν˜„ν•΄μ•Όν•©λ‹ˆλ‹€. 그러면"병합 된 "객체의 λ‹€λ₯Έ 뢀뢄을 κ΅¬μ„±ν•˜κ²Œλ©λ‹ˆλ‹€."라고 λ§ν•©λ‹ˆλ‹€.
잘λͺ»λœ 접근이라고 μƒκ°ν•©λ‹ˆλ‹€. 그것은 당신이 reduxμ—μ„œ λ²—μ–΄λ‚  수 μ—†λ‹€λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. μƒνƒœλ₯Ό κ΄€λ¦¬ν•˜λŠ” λ„κ΅¬λ‘œ μ˜λ„ 된 것은 본질적으둜 μ‘μš© ν”„λ‘œκ·Έλž¨ 논리 의 κ΅¬ν˜„μ΄λ©λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš”, μ €λŠ” λ©°μΉ  λ™μ•ˆ React / Reduxλ₯Ό μ‚΄νŽ΄λ³΄κ³  일뢀 정보λ₯Ό ꡬ성 μš”μ†Œ 둜컬 μƒνƒœμ— μ €μž₯ν•˜κ±°λ‚˜ μœ μ§€ν• μ§€ μ—¬λΆ€λ₯Ό μ„ νƒν•˜κΈ°λ‘œ ν•œ 결정을 μ΄ν•΄ν•©λ‹ˆλ‹€.

ν•˜μ§€λ§Œ ν•˜λ‚˜μ˜ 행동이 λ™μ‹œμ— 두 가지λ₯Ό λͺ¨λ‘ μš”κ΅¬ν•œλ‹€λ©΄ μ–΄λ–»κ²Œ λ κΉŒμš”? λ‹€μŒμ€ 맀우 일반적인 μ‚¬μš© μ‚¬λ‘€μž…λ‹ˆλ‹€.

  1. [μ»¨ν…μŠ€νŠΈ] Redux μ €μž₯μ†ŒλŠ” 단일 리프 { modelItems: myModelItems } μž…λ‹ˆλ‹€. μ„œλ²„ λͺ¨λΈμ„ μΊμ‹œ (일뢀 / 투영)ν•©λ‹ˆλ‹€.
  2. [μ»¨ν…μŠ€νŠΈ] λ·°λŠ” μ €μž₯된 / μΊμ‹œ 된 ν•­λͺ©μ˜ UI λͺ©λ‘μ„ ν‘œμ‹œν•˜λŠ” 단일 슀마트 ꡬ성 μš”μ†Œ MyItemsView 둜 κ΅¬μ„±λ©λ‹ˆλ‹€. 마운트되면 ꡬ성 μš”μ†Œκ°€ λͺ¨λΈ ν•­λͺ© κ°€μ Έ 였기λ₯Ό νŠΈλ¦¬κ±°ν•©λ‹ˆλ‹€. ꡬ성 μš”μ†Œ μž…λ ₯ : myModelItems . ꡬ성 μš”μ†Œ 좜λ ₯ : fetchModelItems μ•‘μ…˜ 트리거. ꡬ성 μš”μ†Œ λ‚΄λΆ€ : state.busy 및 state.errorId
  3. [κ³„νš] MyItemsView κ°€ fetchModelItems MyItemsView νŠΈλ¦¬κ±°ν•˜λ©΄ λͺ¨λΈμ„ κ°€μ Έ μ™€μ„œ μ €μž₯μ†Œμ— μΊμ‹œν•˜κΈ° μœ„ν•΄ HTTP μš”μ²­μ΄ μ„œλ²„λ‘œ μ „μ†‘λ©λ‹ˆλ‹€. 이 비동기 μž‘μ—…μ—λŠ” λ‹€μŒκ³Ό 같은 4 단계와 λ§Žμ€ 후크가 μžˆμŠ΅λ‹ˆλ‹€. onStarted (HTTP μš”μ²­μ΄ μ‹œμž‘ λ˜λ €κ³ ν•˜κ³  ꡬ성 μš”μ†Œμ—μ„œ μŠ€ν”Όλ„ˆλ‘œλ“œκ°€ μ‹œμž‘λ¨), onEnded (HTTP 응닡이 μ‹œμž‘λ¨, μŠ€ν”Όλ„ˆλ‘œλ“œκ°€ ꡬ성 μš”μ†Œμ—μ„œ 쀑지됨) , μ—¬μ „νžˆ 응닡 μƒνƒœλ₯Ό 보지 μ•ŠμŒ), onFailed (ꡬ성 μš”μ†Œμ— 였λ₯˜ μ•Œλ¦Όμ΄ ν‘œμ‹œλ¨) 및 onSucceed (Redux μ €μž₯μ†Œκ°€ μ—…λ°μ΄νŠΈ 된 λ‹€μŒ λ³΄μœ ν•˜κ³ μžˆλŠ” λͺ¨λΈ μΊμ‹œκ°€ 전달됨) λ Œλ”λ§μ„μœ„ν•œ ꡬ성 μš”μ†Œ)

λ”°λΌμ„œ fetchModelItems μ•‘μ…˜ 트리거λ₯Ό λ‹€μŒκ³Ό 같이 λΆ„ν• ν•˜λŠ” 방법 :

  • onStarted , onEnded 및 onFailed λŠ” Redux μŠ€ν† μ–΄μ— λ„λ‹¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆκΉŒ? μ΄λŠ” onStarted 및 onEnded κ°€ λͺ¨λΈ μΊμ‹œμ™€ μƒν˜Έ μž‘μš©ν•˜μ§€ μ•Šμ•„μ•Όν•˜λŠ” μΌμ‹œμ μΈ UI μƒνƒœμ΄κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. onFailed λ§ˆμ°¬κ°€μ§€μž…λ‹ˆλ‹€ (λͺ¨λΈ μΊμ‹œλŠ” λ³€κ²½λ˜μ§€ μ•Šκ³  UIκ°€ 였λ₯˜ μ•Œλ¦Όμ„ λ Œλ”λ§ν•©λ‹ˆλ‹€). MyItemsView λŠ” 여기에 μΊμ‹œ 된 λͺ¨λΈμ΄ μ•„λ‹Œ UI μƒνƒœλ₯Ό λ Œλ”λ§ν•©λ‹ˆλ‹€.
  • onSucceed 이 Redux μŠ€ν† μ–΄λ₯Ό κ°•νƒ€ν•©λ‹ˆκΉŒ? 이 λͺ¨λΈ μΊμ‹œ λ³΅κΆŒμ— 당첨이 있기 λ•Œλ¬Έμ—, λ‹€μŒ λ Œλ”λ§, 재수 μƒ€μ›Œ 것, μ§„λ¦¬μ˜ μ†ŒμŠ€μ— λŒ€ν•œ μ•‘μ„ΈμŠ€ κΆŒν•œμ„ λΆ€μ—¬ μ‹ μ„ ν•œ myModelItems μ—μ„œ MyItemsView

λ‚΄ ν˜„μž¬ μ‹œλ„μ˜ κ΅¬ν˜„μ— λŒ€ν•΄ Redux ThunkλŠ” fetchModelItems μž‘μ—… 트리거λ₯Ό μ²˜λ¦¬ν•©λ‹ˆλ‹€. λ‚˜λŠ” κ·Έκ³³μ—μ„œ Redux 경둜λ₯Ό μ„ νƒν•œ 것 κ°™κ³ , "비동기 성곡을 Redux μŠ€ν† μ–΄μ— μ „λ‹¬ν•˜κ³  λ‹€λ₯Έ 것은 React μ»΄ν¬λ„ŒνŠΈ μƒνƒœμ— μœ μ§€ν•˜λΌ"κ³  더 이상 λ§ˆμŒμ„ λ°”κΏ€ 수 μ—†λ‹€κ³  λŠλ‚λ‹ˆλ‹€.

이것에 λ‹Ήν˜ΉμŠ€λŸ¬μ›Œμ„œ μ €μž₯된 성곡을 κ°€μ Έμ˜€κ³  μ—°κ²°λœ ꡬ성 μš”μ†Œ (예 : Redux μ»¨ν…Œμ΄λ„ˆ)둜 μ „λ‹¬ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ‘œλ”© μŠ€ν”Όλ„ˆμ™€ λΉ„μ°Έν•œ μ½˜μ†” 둜그 였λ₯˜ λ©”μ‹œμ§€ atm이 μ—†μŠ΅λ‹ˆλ‹€. store.ui.myItemsView.busy λ‚˜ store.ui.myItemsView.errorId μ •μ˜ν•˜κ³  μ‹Άμ§€λŠ” μ•Šμ§€λ§Œ ꡬ성 μš”μ†Œ μƒνƒœμ—μ„œ ν•΄λ‹Ή 정보λ₯Ό κ°€μ Έμ˜΅λ‹ˆλ‹€.

@pascalav :
이것은 지원 μ‹œμŠ€ν…œμ΄ μ•„λ‹ˆλΌ 버그 μΆ”μ κΈ°μž…λ‹ˆλ‹€. μ‚¬μš©λ²•μ— λŒ€ν•œ μ§ˆλ¬Έμ€ 더 λ§Žμ€ μ‚¬λžŒλ“€μ΄ 도움을 쀄 μ€€λΉ„κ°€λ˜μ–΄μžˆλŠ” Stack Overflow λ˜λŠ” Reactifluxλ₯Ό μ‚¬μš©ν•˜μ‹­μ‹œμ˜€. μ•„λ§ˆλ„ 더 λ‚˜μ€ 닡변을 더 빨리 얻을 μˆ˜μžˆμ„ κ²ƒμž…λ‹ˆλ‹€. 감사!

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