Redux: 예-μ•‘μ…˜ μœ ν˜• λ„€μž„ 슀페이슀λ₯Ό κ΅¬ν˜„ν•˜λŠ” 방법?

에 λ§Œλ“  2015λ…„ 09μ›” 23일  Β·  32μ½”λ©˜νŠΈ  Β·  좜처: reduxjs/redux

λ‚˜λŠ” μ•‘μ…˜ νƒ€μž… λ„€μž„ 슀페이슀의 쒋은 κ΅¬ν˜„μ„ μ°ΎκΈ° μœ„ν•΄ μ•½ 일주일을 λ³΄λƒˆκ³  μ•‘μ…˜ μƒμ„±μž, λ¦¬λ“€μ„œ 및 ν•˜μœ„ μ „ν™˜ λͺ©λ‘μ„ λ³΄μœ ν•˜λŠ” Transition 클래슀λ₯Ό κΈ°λ°˜μœΌλ‘œν•˜λŠ” λ‚΄ μžμ‹ μ„ λ‘€λ§ν–ˆμ§€λ§Œμ΄ μ ‘κ·Ό 방식은 방법이 ν•„μš”ν•©λ‹ˆλ‹€ 보일러 ν”Œλ ˆμ΄νŠΈ μ½”λ“œκ°€ λ„ˆλ¬΄ 많고 맀우 κ°„λ‹¨ν•œ μž‘μ—…μ΄ 많으면 λ¬Έμ œκ°€λ©λ‹ˆλ‹€.

이 μ €μž₯μ†Œμ™€ λ‹€λ₯Έ λ§Žμ€ μ˜ˆμ œμ—μ„œ 찾을 μˆ˜μžˆλŠ” λͺ¨λ“  μ˜ˆμ œμ—μ„œμ΄ λ¬Έμ œλŠ” μ–΄λ–€ 이유둜 항상 λ¬΄μ‹œλ˜μ§€λ§Œ 이것이 Reduxλ₯Ό μ‘°μ‚¬ν•˜κΈ° μ‹œμž‘ν•  λ•Œ 발견 ν•œ 첫 번째 λ¬Έμ œμ˜€μŠ΅λ‹ˆλ‹€.

여기에 λ­”κ°€ λΉ μ‘Œλ‚˜μš”? 당신은 좩돌 이름을 μ§€μ •ν•˜λŠ” μ•‘μ…˜ μœ ν˜•μ΄ μ—†μŠ΅λ‹ˆκΉŒ?

λˆ„κ΅°κ°€ 예제λ₯Ό μ—…λ°μ΄νŠΈν•˜κ³ μ΄ 문제λ₯Ό μ–΄λ–»κ²Œ μ²˜λ¦¬ν•˜λŠ”μ§€ 보여 μ£Όκ±°λ‚˜ μ˜¬λ°”λ₯Έ λ°©ν–₯을 μ•Œλ €μ€„ 수 μžˆμŠ΅λ‹ˆκΉŒ?

λ‚΄ νŠΉμ • μ‚¬λ‘€λŠ” ν”„λŸ°νŠΈ μ—”λ“œμ— 2 개의 별도 관리 νŒ¨λ„μ΄μžˆλŠ” 것과 관련이 μžˆμŠ΅λ‹ˆλ‹€. ν•˜λ‚˜λŠ” ν…ŒμŠ€ν„° 용이고 λ‹€λ₯Έ ν•˜λ‚˜λŠ” μŠ€ν† μ–΄μ˜ 별도 μ„Ήμ…˜ ( "testerAccount", "customerAccount")에 μƒνƒœλ₯Ό μ €μž₯ν•˜λŠ” 고객 μš©μ΄μ§€λ§Œ λ‘˜ λ‹€ ADD_VIDEO_UPLOAD, ADD_COMMENT λ“±κ³Ό 같은 μœ μ‚¬ν•œ μž‘μ—…μ„ μˆ˜ν–‰ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

여기에 도움을 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. :)

question

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

λ¬Έμžμ—΄μ€ 본질적으둜 λ„€μž„ μŠ€νŽ˜μ΄μŠ€μ— λ‚˜μ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. URL은 λ¬Έμžμ—΄μ΄λ©° μ œλŒ€λ‘œ μž‘λ™ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

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

accountType을 μ•‘μ…˜μ— λ„£μœΌμ‹œκ² μŠ΅λ‹ˆκΉŒ? λ¦¬λ“€μ„œ νŒ©ν† λ¦¬λ₯Ό μž‘μ„±ν•˜κ³  λ™μΌν•œ μ½”λ“œλ₯Ό μ—¬λŸ¬ 번 μ‚¬μš©ν•˜μ—¬ λ‹€λ₯Έ μž‘μ—…μ— μ‘λ‹΅ν•˜λŠ” λ¦¬λ“€μ„œλ₯Ό μƒμ„±ν•˜λŠ” 방법은 examples/real-world/reducers 도 μ°Έμ‘°ν•˜μ„Έμš”.

λ§ˆμ°¬κ°€μ§€λ‘œ μ•‘μ…˜ μƒμ„±μžλŠ” ν•¨μˆ˜μΌ 뿐이며 λ‹€λ₯Έ ν•¨μˆ˜λ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜λ₯Ό λ§Œλ“€ 수 μžˆμŒμ„ μžŠμ§€ λ§ˆμ‹­μ‹œμ˜€.

λ‚˜λŠ” 당신이 기쑴의 μ˜ˆμ—μ„œ λ¬΄μ‹œλ˜μ—ˆλ‹€κ³  λ§ν•˜λŠ” 문제의 νŠΉμ • μž‘μ€ 예λ₯Ό μ œκ³΅ν•˜λ©΄ 정말 도움이 될 것이라고 μƒκ°ν•©λ‹ˆλ‹€.

그런 λ‹€μŒ νŠΉμ • 예λ₯Ό λ‹¨μˆœν™”ν•˜λŠ” 방법을 찾도둝 도와 λ“œλ¦΄ 수 μžˆμŠ΅λ‹ˆλ‹€. μ½”λ“œμ—†μ΄ μ§ˆλ¬Έμ— λŒ€ν•œ μ‘λ‹΅μœΌλ‘œ νŠΉμ •ν•œ 것을 μ œμ•ˆν•˜λŠ” 것은 맀우 μ–΄λ ΅μŠ΅λ‹ˆλ‹€.

@gaearon λ‚˜λŠ” 당신이 μ΄κ²ƒμœΌλ‘œ μ–΄λ””λ‘œ ν–₯ν•˜κ³  μžˆλŠ”μ§€ μ•Œκ³  μžˆμ§€λ§Œ μž¬μ‚¬μš© κ°€λŠ₯ν•œ 감속기, μ•‘μ…˜ μ œμž‘μž λ˜λŠ” DRY 물건을 λ§Œλ“€λ €κ³ ν•˜μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€.

두 μ‚¬λžŒμ΄ μ‹œμŠ€ν…œμ˜ μ„œλ‘œ λ‹€λ₯Έ μ„Ήμ…˜μ—μ„œ μž‘μ—… ν•  수 μžˆλ„λ‘ μž‘μ—… 그룹을 μ„œλ‘œ λΆ„λ¦¬ν•˜λ €κ³  λ…Έλ ₯ν•˜κ³  있으며 μž‘μ—… μœ ν˜• 이름에 λ„€μž„ μŠ€νŽ˜μ΄μŠ€κ°€ λΆ€μ‘±ν•˜μ—¬ μ‹€μˆ˜λ‘œ μ„œλ‘œμ˜ 감속기λ₯Ό νŠΈλ¦¬κ±°ν•˜μ§€ μ•Šλ„λ‘ν•©λ‹ˆλ‹€.

이것이 더 λͺ…ν™• 해지기λ₯Ό λ°”λžλ‹ˆλ‹€.

https://www.npmjs.com/package/flux-constant λ₯Ό createActionTypes λΌλŠ” 맀우 κ°„λ‹¨ν•œ λ„μš°λ―Έ ν•¨μˆ˜μ™€ ν•¨κ»˜ μ‚¬μš©ν•˜μ—¬ λ‚΄ ν”„λ‘œμ νŠΈμ—μ„œμ΄ 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.

본질적으둜 λ‚΄ μ½”λ“œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

// create-action-types.js
var fluxConstant = require('flux-constant');
module.exports = function (types) {
    return fluxConstant.set(types);
};

// in foo-action-types.js
module.exports = createAtionTypes([
    'ADD_FOO',
    'REMOVE_FOO'
]);

// in some-store.js
var fooActionTypes = require('foo-action-types');
function (state, action) {
    switch(action.type) {
        case fooActionTypes.ADD_FOO: 

        case fooActionTypes.REMOVE_FOO:
   }
}

λͺ¨λ“  μ•‘μ…˜ μœ ν˜•μ„ ν•œκ³³μ—μ„œ μƒμˆ˜λ‘œ μœ μ§€ν•˜μ§€ μ•ŠλŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?
그런 λ‹€μŒ λ™μΌν•œ 이름을 두 번 내보낼 수 μ—†κΈ° λ•Œλ¬Έμ— 좩돌 ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

이λ₯Ό 더 잘 μ‹œκ°ν™”ν•˜κΈ° μœ„ν•΄ 이것이 μƒμ μ˜ 초기 μƒνƒœλΌκ³  κ°€μ • ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€.

let initialState = {
  "testerAccount": {
    "videoUploads": [],
    "messages": []
  },
  "customerAccount": {
    "videoUploads": [],
    "messages": []
  },
  "systemUserAccount": {
    "videoUploads": [],
    "messages": []
  }
};

μ΄λŸ¬ν•œ 각 μ„Ήμ…˜μ— λŒ€ν•΄ λΉ„λ””μ˜€ λ˜λŠ” λ©”μ‹œμ§€λ₯Ό μΆ”κ°€ν•˜κΈ° μœ„ν•΄ λ³„λ„μ˜ 감속기λ₯Ό κ΅¬ν˜„ν•  λ•Œ μž‘μ—… μœ ν˜• 이름 μΆ©λŒμ„ μ–΄λ–»κ²Œ ν”Όν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

@gaearon 당신이 μ œμ•ˆν•˜λŠ” 것은 문제의 핡심을 ν•΄κ²°ν•˜μ§€ λͺ»ν•©λ‹ˆλ‹€. μ‹œκ°„μ΄ 지남에 따라 λ§Žμ€ 문제λ₯Ό μΌμœΌν‚€λŠ” κ±°λŒ€ν•œ μœ ν˜•μ˜ 파일둜 끝날 것이기 λ•Œλ¬Έμ— λ•νŠΈ ν…Œμ΄ν”„ μ ‘κ·Ό 방식에

μ½”λ“œ 병합 쀑에 κ³§λ°”λ‘œ λ¬Έμ œκ°€ λ°œμƒν•˜λ©° λ‚˜μ€‘μ— 이름 지정 ν•΄ν‚ΉμœΌλ‘œ ν•΄κ²°ν•΄μ•Όν•©λ‹ˆλ‹€. 예 :

ADD_VIDEO_UPLOAD, ADD_TESTER_VIDEO_UPLOAD, ADD_VIDEO_UPLOAD_IN_SOME_SECTION λ“±

λ‹€μ‹œ ν•œ 번 큰 κ³¨μΉ«κ±°λ¦¬μž…λ‹ˆλ‹€.

@koulmomo 이것이 λ°”λ‘œ μ œκ°€ 찾던 κ²ƒμž…λ‹ˆλ‹€. κ°μ‚¬ν•©λ‹ˆλ‹€ :) : +1 : κ°„λ‹¨ν•˜κ³  κ°•λ ₯ν•©λ‹ˆλ‹€.

@gaearon 이 νŒ¨ν‚€μ§€ λ‚˜ redux-constantλΌλŠ” μ΄λ¦„μ˜ μƒˆ νŒ¨ν‚€μ§€λ₯Ό μ‚¬μš©ν•˜λŠ” μ˜ˆμ œκ°€ ν•˜λ‚˜ 이상 μžˆμ–΄μ•Όν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

λ‚΄ μ˜κ²¬μœΌλ‘œλŠ” λ„€μž„ 슀페이슀 문제λ₯Ό ν•΄κ²°ν•˜λŠ” λ¬Έμ„œ / μ˜ˆμ œμ—μ„œ μ ‘κ·Ό 방식을 ν™λ³΄ν•˜λŠ” 것이 μƒˆλ‘œμš΄ κΈ°λ³Έκ°’μ΄μ–΄μ•Όν•©λ‹ˆλ‹€.

도와 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€ :)

κ·€ν•˜μ˜ μ˜ˆμ—μ„œ λ‚˜λŠ” μ™œ ν•˜λ‚˜μ˜ μœ ν˜• μ„ΈνŠΈ, ν•˜λ‚˜μ˜ 감속기 생성기 및 ν•˜λ‚˜μ˜ μ•‘μ…˜ 생성기 μ„ΈνŠΈκ°€ μ—†λŠ”μ§€ μ΄ν•΄ν•˜μ§€ λͺ»ν•©λ‹ˆλ‹€. μ•‘μ…˜μ€ 그듀을 κ΅¬λ³„ν•˜κΈ° μœ„ν•΄ accountType 속성을 ν¬ν•¨ν•©λ‹ˆλ‹€. μ•‘μ…˜ μ œμž‘μžλŠ”μ΄λ₯Ό 맀개 λ³€μˆ˜λ‘œ λ°›μ•„λ“€μž…λ‹ˆλ‹€. 감속기 νŒ©ν† λ¦¬λŠ” accountType μˆ˜λ½ν•˜κ³ μ΄ 계정 μœ ν˜•μ˜ μž‘μ—… 만 μ²˜λ¦¬ν•˜λŠ” 감속기λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

flux-constant 이 μ—¬κΈ°μ—μ„œ ν›Œλ₯­ν•œ μ†”λ£¨μ…˜μ΄λΌκ³  μƒκ°ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. instanceof μˆ˜ν‘œμ— μ˜μ‘΄ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. 즉, deserialized μœ ν˜•μ΄ 생성 된 μœ ν˜•κ³Ό μΌμΉ˜ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μž‘μ—…μ„ μ§λ ¬ν™”ν•˜κ³  λ‚˜μ€‘μ— λ‹€μ‹œ μž¬μƒν•  수 μ—†μŠ΅λ‹ˆλ‹€.

μ‚¬λžŒλ“€μ€ μ’…μ’… Flux 의 ν•„μˆ˜ κΈ°λŠ₯을 깨뜨리고 μžˆλ‹€λŠ” 사싀을 깨닫지 λͺ»ν•œ 채 Fluxλ₯Όβ€œλ‹¨μˆœν™”β€ν•˜λ €κ³ 

κ·€ν•˜μ˜ μ˜ˆμ—μ„œ λ‚˜λŠ” μ™œ ν•˜λ‚˜μ˜ μœ ν˜• μ„ΈνŠΈ, ν•˜λ‚˜μ˜ 감속기 생성기 및 ν•˜λ‚˜μ˜ μ•‘μ…˜ 생성기 μ„ΈνŠΈκ°€ μ—†λŠ”μ§€ μ΄ν•΄ν•˜μ§€ λͺ»ν•©λ‹ˆλ‹€. μž‘μ—…μ—λŠ” κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ accountType 속성이 ν¬ν•¨λ©λ‹ˆλ‹€. μ•‘μ…˜ μ œμž‘μžλŠ”μ΄λ₯Ό 맀개 λ³€μˆ˜λ‘œ λ°›μ•„λ“€μž…λ‹ˆλ‹€. 감속기 νŒ©ν† λ¦¬λŠ” accountType을 μˆ˜λ½ν•˜κ³ μ΄ 계정 μœ ν˜•μ˜ μž‘μ—… 만 μ²˜λ¦¬ν•˜λŠ” 감속기λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

λ‚˜λŠ” λ‹Ήμ‹ μ˜ μ˜ˆμ—μ„œ λͺ…λ°±ν•œ λŒ€μΉ­μœΌλ‘œ μ˜€ν•΄λ₯Ό λ°›μ•˜μŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 당신이 여기에 DRYκ°€ μ—†λ‹€λŠ” 것을 μ˜λ―Έν–ˆμœΌλ©° κΈ°λŠ₯의 λŒ€μΉ­μ€ https://github.com/rackt/redux/issues/786#issuecomment -142649749μ—μ„œ λ§ν•œ κ²ƒμ²˜λŸΌ λΆ„λͺ…ν•©λ‹ˆλ‹€.

여기에 λ„μ„œκ΄€μ΄ ν•„μš”ν•˜μ§€ μ•Šλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. μ»¨λ²€μ…˜μ„ μ„Έμš°μ‹­μ‹œμ˜€! 예λ₯Ό λ“€μ–΄, ν•˜μœ„ ν”„λ‘œμ νŠΈ λ˜λŠ” κΈ°λŠ₯이 λ„ˆλ¬΄ 뢄리 된 경우 μž‘μ—… μœ ν˜• feature/ACTION_TYPE (예 : testers/UPLOAD_VIDEO λ˜λŠ” customers/UPLOAD_VIDEO λ₯Ό ν˜ΈμΆœν•˜λŠ” κ·œμΉ™μ„ λ§Œλ“œμ‹­μ‹œμ˜€. 이 "κ·Έλ£Ή"이 μ‹€μ œλ‘œ λ””μŠ€ν¬μ˜ μ‹€μ œ 폴더 (λ˜λŠ” 더 λ‚˜μ€ νŒ¨ν‚€μ§€)에 ν•΄λ‹Ήν•˜λŠ” 경우 특히 μœ μš©ν•©λ‹ˆλ‹€.

μœ„λ°˜μ€ μ½”λ“œ κ²€ν† μ—μ„œ μ‰½κ²Œ 포착 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. _ μ •λ§λ‘œ _ μ›ν•œλ‹€λ©΄ 이것을 μžλ™ν™” ν•  μˆ˜λŠ” μžˆμ§€λ§Œ μˆ˜λ™ λ„€μž„ 슀페이슀λ₯Ό μ–΄λ–»κ²Œ κ°€μ Έ μ˜€λŠ”μ§€ μ•Œ 수 μ—†μŠ΅λ‹ˆλ‹€. 각 λͺ¨λ“ˆ λ‚΄μ—μ„œ κΈ°λŠ₯을보닀 μ‰½κ²Œ β€‹β€‹μ œμ–΄ν•˜κ³  μ‹€μˆ˜λ‘œ μΈν•œ λ…Έλ ₯의 쀑볡을 λ°©μ§€ν•˜κ³  λ¬Έμ„œλ‘œ λͺ¨λ“  μƒμˆ˜λ₯Ό ν•˜λ‚˜μ˜ νŒŒμΌμ— μ„ μ–Έν•˜κ³  싢을 κ²ƒμž…λ‹ˆλ‹€.

μ½”λ“œ λΆ„ν• , λ„€μž„ 슀페이슀 μž‘μ—… μœ ν˜• 등을 μ‚¬μš©ν•˜μ—¬ huge-apps 예제λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€. κ·Έλž˜λ„ λ³„λ„μ˜ λ¬Έμ œμž…λ‹ˆλ‹€.

λ¬Έμžμ—΄μ€ 본질적으둜 λ„€μž„ μŠ€νŽ˜μ΄μŠ€μ— λ‚˜μ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. URL은 λ¬Έμžμ—΄μ΄λ©° μ œλŒ€λ‘œ μž‘λ™ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

@gaearon λ§žμ•„μš”, ν”ŒλŸ­μŠ€ μƒμˆ˜λ₯Ό 기반으둜 ν•œ μ†”λ£¨μ…˜μœΌλ‘œ 직렬화 문제λ₯Ό μžŠμ–΄ λ²„λ ΈμŠ΅λ‹ˆλ‹€.

자체 μ΄λ¦„μœΌλ‘œ λͺ¨λ“ˆ / λ„€μž„ 슀페이슀λ₯Ό μ‰½κ²Œ ꡬ뢄할 μˆ˜μžˆλŠ” ν•œ λ¬Έμžμ—΄ 기반 λ„€μž„ μŠ€νŽ˜μ΄μŠ€μ—λŠ” λ¬Έμ œκ°€ μ—†μŠ΅λ‹ˆλ‹€.

λͺ…λͺ… κ·œμΉ™ 기반 μ†”λ£¨μ…˜μ€ 이전에 λ³Έ κ²ƒμž…λ‹ˆλ‹€.

https://github.com/erikras/ducks-modular-redux

κ·ΈλŸ¬λ‚˜ λ‚˜λŠ” λ‹Ήμ‹ μ˜ κ²½ν—˜μ„ 기반으둜 ν•  더 λ‚˜μ€ λ˜λŠ” "μ˜¬λ°”λ₯Έ"방법이 있기λ₯Ό λ°”λžλ‹ˆλ‹€.

ν”ŒλŸ­μŠ€ μƒμˆ˜ μ ‘κ·Ό 방식을 μ‹€μ œλ‘œ μ–΄λ–€ 식 μœΌλ‘œλ“  직렬화 ν•  μˆ˜μžˆλŠ” κ²ƒμœΌλ‘œ λ³€ν™˜ν•˜λ €κ³  μ‹œλ„ ν•  κ²ƒμž…λ‹ˆλ‹€.

λ‹€λ₯Έ μ‚¬λžŒλ“€μ˜ μ‹œκ°„μ„ 많이 μ ˆμ•½ ν•  수 있고 λ‚˜μ€‘μ— μ‰½κ²Œ λ”°λ₯Ό μˆ˜μžˆλŠ” μΌμ’…μ˜ κ·œμΉ™μ„ μˆ˜λ¦½ν•˜λŠ” 데 도움이 될 κ²ƒμ΄λ―€λ‘œ μ‹œκ°„μ΄ 있으면 "κ±°λŒ€ν•œ μ•±"예제λ₯Ό μΆ”κ°€ν•˜μ‹­μ‹œμ˜€.

λ‹€μ‹œ κ°μ‚¬ν•©λ‹ˆλ‹€ :)

예, μ£„μ†‘ν•©λ‹ˆλ‹€. μ•ˆνƒ€κΉκ²Œλ„ ν•œλ™μ•ˆ 큰 μ•±μ—μ„œ μž‘μ—…ν•˜μ§€ μ•Šμ•˜κ³ , 그럴 λ•Œλ„ μ‹€μ œλ‘œ μ–΄λ–€ 일이 일어날 지에 λŒ€ν•œ 쒋은 κ°œμš”λ₯Ό μ œκ³΅ν•˜κΈ° λ•Œλ¬Έμ— μƒμˆ˜κ°€ μ„Ήμ…˜μœΌλ‘œ κ·Έλ£Ήν™” 된 ν•˜λ‚˜μ˜ κ±°λŒ€ν•œ 파일이 μžˆλ‹€λŠ” 점이 μ’‹μ•˜μŠ΅λ‹ˆλ‹€. μ•±μ—μ„œ.

이 "문제"κ°€ λ¬Έμ„œμ—μ„œ 더 μžμ„Ένžˆ μ„€λͺ…λ˜λŠ” 것을보고 μ‹ΆμŠ΅λ‹ˆλ‹€. @pbc와 같은 질문이 μžˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” "μ™œ λͺ¨λ“  μ•‘μ…˜ μœ ν˜•μ„ ν•œκ³³μ—μ„œ μƒμˆ˜λ‘œ μœ μ§€ν•˜μ§€ μ•ŠλŠ”κ°€?"라고 μƒκ°ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ—¬λŸ¬ ν”„λ‘œμ νŠΈμ—μ„œ μ—¬λŸ¬ λͺ¨λ“ˆμ„ μž¬μ‚¬μš©ν•˜κ³  "κ·œμΉ™μ„ μ„€μ •ν•˜μ‹­μ‹œμ˜€!" CSS λžœλ“œμ˜ BEMκ³Ό 맀우 ν‘μ‚¬ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μš°λ¦¬λŠ” BEMμ—μ„œ CSS λͺ¨λ“ˆλ‘œ μ΄λ™ν•˜κ³  큰 ν”„λ‘œμ νŠΈμ˜ μ•‘μ…˜ μœ ν˜•μ—λ„ ν•΄μ‹œ 클래슀 이름이 ν•„μš”ν•œ CSS λͺ¨λ“ˆκ³Ό λΉ„μŠ·ν•œ κ²ƒμœΌλ‘œ μƒκ°ν•©λ‹ˆλ‹€.

λ‚΄κ°€ 말할 μˆ˜μžˆλŠ” ν•œ, 직렬화와 좩돌 μ—†μŒμ„ λͺ¨λ‘ 달성 ν•  μˆ˜μžˆλŠ” 방법은 μ—†μŠ΅λ‹ˆλ‹€.

μž¬μ‚¬μš© κ°€λŠ₯ν•œ λͺ¨λ“ˆμ— λŒ€ν•œ 쒋은 κ·œμΉ™μ€ μ—­ 도메인 이름, github의 μ‚¬μš©μž 이름 / repo λ˜λŠ” npm의 등둝 된 λͺ¨λ“ˆ 이름과 같은 κΈ°μ‘΄ "고유 κ³΅κΈ‰μž"λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


νŽΈμ§‘ : CSS λͺ¨λ“ˆμ€ CSS μœ„μ— μ‚¬μš©μž μ •μ˜ μ–Έμ–΄λ₯Ό μ •μ˜ν•˜κ³  사전 처리 쀑에 클래슀 이름을 μ ‘λ‘μ‚¬λ‘œ μ§€μ •ν•˜μ—¬μ΄λ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€ (μ–΄μ¨Œλ“  κ·œμΉ™μ— 따라 μƒμ„±λ˜μ§€λ§Œ 생성 된 κ²ƒμž„).

질문과 토둠에 +1. λ‚˜λŠ” λ˜ν•œ @pbc 와 같은 μ •ν™•ν•œ 문제둜 λ§Žμ€ 어렀움을

직렬화 κ°€λŠ₯ν•œ λ¬Έμžμ—΄ μž‘μ—… μœ ν˜•μ— λŒ€ν•œ μ†”λ£¨μ…˜μ„ 찾은 것 κ°™μŠ΅λ‹ˆλ‹€. 우리 마음이 μ–΄λ–€ 것에 μΈμœ„μ μΈ μ œν•œμ„ κ°€ν•˜λŠ” 상황 쀑 ν•˜λ‚˜λΌκ³  μƒκ°ν•©λ‹ˆλ‹€.

κΈ°λ³Έ μ•„μ΄λ””μ–΄λŠ” μœ ν˜• μƒμˆ˜κ°€ μ–΄λ–€ 식 μœΌλ‘œλ“  λ¬Έμžμ—΄ κ°’κ³Ό κ΄€λ ¨ 될 ν•„μš”κ°€ μ—†λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. λ”°λΌμ„œ λ¬΄μž‘μœ„λ‘œ 생성 된 κ°’, ν•΄μ‹œ 된 파일 경둜 λ˜λŠ” μœ ν˜• μƒμˆ˜ λ¬Έμžμ—΄ 값에 λŒ€ν•΄ 고유 ν•œ λ‹€λ₯Έ 것을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ°μ†κΈ°μ—μ„œ μœ ν˜• μƒμˆ˜λ₯Ό μ΄λ¦„μœΌλ‘œ κ°€μ Έμ˜€κ³  μ΄λ¦„μœΌλ‘œ λΉ„κ΅ν•©λ‹ˆλ‹€. 이 이름은 λ‹€λ₯Έ μž‘μ—… 및 λ‹€λ₯Έ κ°μ†κΈ°μ—μ„œ μ‚¬μš©ν•  수 μžˆμ§€λ§Œ 값이 λ™μΌν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ€‘μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

예 : https://gist.github.com/samsch/63a54e868d7fa2b6023a

이것은 ν˜„λͺ…ν•©λ‹ˆλ‹€. μ—¬μ „νžˆ μž‘μ—… 이름에 μ‚¬λžŒμ΄ 읽을 μˆ˜μžˆλŠ” 뢀뢄을 μœ μ§€ν•˜κ³  μ‹Άμ§€λ§Œ 고유 ν•œ 접두사λ₯Ό μƒμ„±ν•˜λ©΄ μ™„μ „νžˆ μž‘λ™ν•©λ‹ˆλ‹€.

λ¬Όλ‘  그듀이 λ…νŠΉν•˜λ‹€λŠ” 것을 증λͺ…ν•  수 μžˆλ‹€λ©΄.
κ°€μž₯ 쒋은 방법은 μ—¬μ „νžˆ ​​기쑴 κ³ μœ μ„± κ³΅κΈ‰μž (μ—­ 도메인 이름 λ˜λŠ” npm λͺ¨λ“ˆ 이름)λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

κ·œμΉ™μ΄μžˆλŠ” λ„€μž„ μŠ€νŽ˜μ΄μŠ€λŠ” λͺ¨λ“ˆμ„ μž‘μ„±ν•  λ•Œ μ œμ–΄ ν•  μˆ˜μ—†λŠ” λ‹€μ–‘ν•œ μž₯μ†Œμ—μ„œ μ‚¬μš©ν•  μˆ˜μžˆλŠ” 것보닀 μœ„ν—˜ν•©λ‹ˆλ‹€.

ActionType이 "Area"인 "Geometry"λͺ¨λ“ˆμ΄ μžˆλ‹€κ³  κ°€μ • ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€. 이 λͺ¨λ“ˆμ€ 두 κ³³μ—μ„œ μ‚¬μš©λ©λ‹ˆλ‹€.

  1. AppA-> Drawing-> Geometry (namespace = "Drawing / Geometry / Area")
  2. AppB-> Trigonometry-> Shape-> Geometry (namespace = "Trigonometry / Shape / Area")

이제 λͺ¨λ“ˆμ΄ μ‚¬μš©λ˜λŠ” μœ„μΉ˜μ— 따라 두 개의 μΆ©λŒν•˜λŠ” λ„€μž„ μŠ€νŽ˜μ΄μŠ€κ°€ μžˆμŠ΅λ‹ˆλ‹€.

  • ActionType "Area"에 λŒ€ν•œ Geometry λͺ¨λ“ˆμ—μ„œμ΄ 전체 경둜λ₯Ό ν•˜λ“œ μ½”λ”©ν•˜λŠ” 것은 쒋지 μ•ŠμŠ΅λ‹ˆλ‹€.
  • 였히렀 이름을 λ‹¨μˆœν•˜κ²Œ μœ μ§€ν•˜μ‹­μ‹œμ˜€ : "μ˜μ—­".
  • λ¦¬λ“€μ„œ ꡬ성과 μœ μ‚¬ν•œ λ°©μ‹μœΌλ‘œ 각 포함 λΆ€λͺ¨κ°€ 접두사λ₯Ό μΆ”κ°€ν•˜λ„λ‘ν•˜μ—¬ λ„€μž„ 슀페이슀λ₯Ό κ΅¬μ„±ν•©λ‹ˆλ‹€.

λ‹€μŒ νŒ¨ν„΄μœΌλ‘œ μ‹€ν—˜ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒμ„ ν¬ν•¨ν•˜λŠ” 각 μ»¬λ ‰μ…˜ μœ ν˜•μ— λŒ€ν•œ dir을 λ§Œλ“­λ‹ˆλ‹€.

  • consts
  • 감속기
  • ꡬ성 μš”μ†Œ
  • 사가

λ‹€μŒ ν˜•μ‹μœΌλ‘œ constλ₯Ό λ§Œλ“­λ‹ˆλ‹€.

// song-store/song-store-consts.js
export const ADD = 'SONG_STORE.ADD'
export const REMOVE = 'SONG_STORE.REMOVE'

감속기, saga λ˜λŠ” μ•‘μ…˜μ—μ„œ μƒμˆ˜λ₯Ό μ‚¬μš©ν•  λ•Œ import λͺ¨λ‘ * :

// song-store/song-store-actions.js
import * as SONG_STORE from './song-store-consts'

export function addSongStore(name) {
  return {
    type: SONG_STORE.ADD,
    name
  }
}

export function removeSongStore(songStoreId) {
  return {
    type: SONG_STORE.REMOVE,
    songStoreId
  }
}

μŠ¬ν”„κ²Œλ„ λ‚˜λ¬΄ ν”λ“€κΈ°μ—λŠ” 쒋지 μ•ŠμŠ΅λ‹ˆλ‹€. ES6κ°€ ν—ˆμš©ν•œλ‹€λ©΄ 쒋을 κ²ƒμž…λ‹ˆλ‹€.

import { ADD, REMOVE } as SONG_STORE from './song-store-actions'

Webpack 2κ°€ 지λŠ₯적으둜 import * 트리 쉐이킹 ν•  수 μžˆλŠ”μ§€ λˆ„κ΅¬λ“ μ§€ μ•Œκ³  μžˆμœΌλ―€λ‘œ * κ°€μ Έμ˜¨ κ²½μš°μ—λ„ μ‚¬μš©λ˜μ§€ μ•ŠλŠ” 내보내기 μ½”λ“œλ₯Ό λ²ˆλ“€λ‘œ μ œκ³΅ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

이것은 맀우 일반적인 문제둜 보이며 λ‹€μŒκ³Ό 같은 경우 μ‚¬λ¬΄μ‹€μ—μ„œ 자주 λ°œμƒν•©λ‹ˆλ‹€.

  • 이름 좩돌둜 인해 μ›ν•˜μ§€ μ•ŠλŠ” λ™μž‘μ΄ λ°œμƒν•©λ‹ˆλ‹€.
  • 고유 ν•œ μž‘μ—… μœ ν˜• 생성과 κ΄€λ ¨λœ μƒμš©κ΅¬μ— λŒ€ν•΄ λΆˆν‰ν•©λ‹ˆλ‹€.

μš°λ¦¬λŠ” λͺ‡ 가지 λ‹€λ₯Έ 해결책을 μ‹œλ„ν–ˆμ§€λ§Œ 아무것도 뢙지 μ•ŠλŠ” κ²ƒμ²˜λŸΌ λ³΄μ˜€μŠ΅λ‹ˆλ‹€.

  1. λͺ¨λ“  μ•‘μ…˜ μœ ν˜•μ„ ν•œκ³³μ— μƒμˆ˜λ‘œ μœ μ§€ν•˜λ©΄ ν™•μ‹€νžˆ κ΄€λ¦¬ν•˜κΈ°κ°€ 더 μ‰¬μ›Œ μ§€μ§€λ§Œ 앱이 컀지면 쑰금 닀루기가 μ–΄λ €μ›Œμ§‘λ‹ˆλ‹€.
  2. @samschκ°€ μ–ΈκΈ‰ ν•œ λ¬΄μž‘μœ„λ‘œ 생성 된 κ°’ 은 정말 λ‚΄ 관심을 λŒμ—ˆκ³  ν™•μ‹€νžˆ μž‘λ™ν•˜μ§€λ§Œ 예, μ‚¬λžŒμ΄ 읽을 μˆ˜μžˆλŠ” 뢀뢄을 μžƒμœΌλ©΄ μƒν™œν•˜κΈ°κ°€ 더 μ–΄λ €μ›Œμ§‘λ‹ˆλ‹€.
  3. μœ„μ˜ @philholden 의 의견 은 μš°λ¦¬κ°€ 일반적으둜 κΈ°λŠ₯ 쀑심 μ•„ν‚€ν…μ²˜λ₯Ό μ‚¬μš©ν•˜κ³  디렉토리 ꡬ쑰가 맀우 μ„€λͺ… 적이기 λ•Œλ¬Έμ— μ €μ—κ²Œ 정말

μ§€λ‚œ λͺ‡ 달 λ™μ•ˆ μ‹€ν—˜ ν•œ ν›„ μš°λ¦¬λŠ” 디렉토리 ꡬ쑰λ₯Ό μ‚¬μš©ν•˜μ—¬ μ•‘μ…˜ μœ ν˜•μ˜ λ„€μž„ 슀페이슀λ₯Ό μ§€μ •ν•˜κΈ°λ‘œ κ²°μ •ν–ˆμŠ΅λ‹ˆλ‹€. μˆ˜λ™μœΌλ‘œ μž…λ ₯ν•˜λŠ” 것은 정말 빨리 λŠ™μ–΄ κ°€κΈ° λ•Œλ¬Έμ— __filename λ­”κ°€λ₯Ό μ‹œλ„ν–ˆμ§€λ§Œ μ½”λ“œ λ²ˆλ“€λ§ λ“±μœΌλ‘œ 인해 μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 그런 λ‹€μŒ ν‚€μ›Œλ“œ __filenamespace λ₯Ό λ³€ν™˜ν•˜λŠ” 첫 번째 Babel ν”ŒλŸ¬κ·ΈμΈ 을 λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€ __filenamespace λ₯Ό 정적 λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•˜λ©΄ 잘 μž‘λ™ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

예

App/testerAccount/index.js :

// Something like this
const ADD_VIDEO_UPLOAD = `${__filenamespace}/ADD_VIDEO_UPLOAD`;
const ADD_COMMENT = `${__filenamespace}/ADD_COMMENT`;

// Will be transformed into something like this
const ADD_VIDEO_UPLOAD = 'App/testerAccount/ADD_VIDEO_UPLOAD';
const ADD_COMMENT = 'App/testerAccount/ADD_COMMENT';

자유둭게 μ‚¬μš©ν•΄λ³΄μ„Έμš”. μœ μš©ν•˜κΈ°λ₯Ό λ°”λžλ‹ˆλ‹€. 특히 이슈 μž‘μ„±μžμ΄μž 라이브러리 μž‘μ„±μž 인 @pbc λ˜λŠ” @gaearon μœΌλ‘œλΆ€ν„° ν”Όλ“œλ°±μ„λ°›λŠ” 것은 ν™˜μƒμ  일 κ²ƒμž…λ‹ˆλ‹€.

https://www.npmjs.com/package/babel-plugin-filenamespace

λ‚˜λŠ” λˆ„κ΅°κ°€κ°€ "ν‘œμ€€"을 μ œμ‹œν•˜κΈ°λ₯Ό μ •λ§λ‘œ 바라고 μžˆμ—ˆλ‹€. 이λ₯Ό μœ„ν•΄ 기호 λ‚˜ 객체가 ν•„μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. κ·œμΉ™ 만 μžˆμœΌλ©΄λ©λ‹ˆλ‹€.

"featureName$actionType" λ˜λŠ” "fileName/ACTION_TYPE" λ˜λŠ” "PROJECT.FEATURE.ACTION" ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ? 우리 λͺ¨λ‘κ°€ λ™μ˜ ν•  수 μžˆλ‹€λ©΄ 감속기λ₯Ό κ³΅μœ ν•˜λŠ” 것이 더 μ‰¬μšΈ κ²ƒμž…λ‹ˆλ‹€.

λ‹€λ₯Έ μ‚¬μš© κ°€λŠ₯ν•œ κ·œμΉ™μ΄ λΆ€μ‘±ν•˜μ—¬ Ducks κ°€ μ‚¬μ‹€μƒμ˜ ν‘œμ€€μ΄ 된 것 κ°™μŠ΅λ‹ˆλ‹€.

const ACTION = 'app/feature/ACTION'; μΆ©λΆ„ν•©λ‹ˆλ‹€.

@gaearon 은 항상 μ•‘μ…˜κ³Ό λ¦¬λ“€μ„œ μ‚¬μ΄μ˜ 1 : 1 관계가 μ•„λ§ˆλ„ λ‚˜μœ 생각이라고 μ–ΈκΈ‰ν–ˆμœΌλ©° 정말 λ™μ˜ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 두 개의 λ‹€λ₯Έ λ·°κ°€ μ‹€μ œλ‘œ λ™μΌν•œ 감속기λ₯Ό ν˜ΈμΆœν•˜λ €λŠ” κ²½μš°λŠ” μ–΄λ–»μŠ΅λ‹ˆκΉŒ?
예λ₯Ό λ“€μ–΄. κ°„λ‹¨ν•œ ν™˜κ²½ μ„€μ • 토글은 두 κ³³μ—μ„œ ν™œμ„±ν™” λ˜λŠ” λΉ„ν™œμ„±ν™” ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
/ myaccount / toggleNotification
/ dashboard / toggleNotification
λ”°λΌμ„œ λ™μΌν•œ λ‚΄μš©μœΌλ‘œ μž‘μ„±λœ 두 개의 감속기가 μžˆμ–΄μ•Όν•©λ‹ˆλ‹€.
reducers / notifications.js
μ°Έμ‘° : @ samit4me , @philholden


λ‹€λ₯Έ μƒκ°μœΌλ‘œ, 이것은 λ‹€λ₯Έ μž‘μ—… μ΄λ¦„μœΌλ‘œ λ™μΌν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 파일 내에 두 개 μ΄μƒμ˜ 감속기λ₯Ό κ°–λŠ” 것이 쒋은 생각이라고 μƒκ°ν•©λ‹ˆλ‹€. 이것은 감속기λ₯Ό λ³΄λŠ” κ²ƒλ§ŒμœΌλ‘œλ„ μ–Όλ§ˆλ‚˜ λ§Žμ€ κ³³μ—μ„œ νŠΉμ • μƒνƒœκ°€ μˆ˜μ •λ˜κ³  μžˆλŠ”μ§€ 이해할 μˆ˜μžˆλŠ” λ°©λ²•μž…λ‹ˆλ‹€.

μ–΄μ¨Œλ“  μ „λ¬Έκ°€μ˜ μ˜κ²¬μ„ λ“£κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. 감사.

@ivks : 여기에 λͺ‡ 가지 생각이 μžˆμŠ΅λ‹ˆλ‹€.

첫째, μ‘μš© ν”„λ‘œκ·Έλž¨ λ‚΄μ˜ μ—¬λŸ¬ μœ„μΉ˜μ—μ„œ λ™μΌν•œ μž‘μ—…μ„ 전달할 수 μžˆμŠ΅λ‹ˆλ‹€.

λ‘˜μ§Έ, λ™μΌν•œ 감속기가 μ—¬λŸ¬ μž‘μ—… μœ ν˜•μ„ μˆ˜μ‹ ν•˜κ³  λ™μΌν•œ λ°©μ‹μœΌλ‘œ 처리 ν•  수 β€‹β€‹μžˆμŠ΅λ‹ˆλ‹€.

μ…‹μ§Έ, "1 : 1 관계"츑면은 각각의 μƒνƒœ λΉ„νŠΈλ₯Ό λ…λ¦½μ μœΌλ‘œ μ—…λ°μ΄νŠΈν•˜λŠ” λ™μΌν•œ μž‘μ—…μ„ μˆ˜μ‹ ν•˜λŠ” μ—¬λŸ¬ 슬라이슀 감속기λ₯Ό κ°€μ§ˆ 수 μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. 예, λŒ€λΆ€λΆ„μ˜ 경우 주어진 μž‘μ—…μ„ μ²˜λ¦¬ν•˜λŠ” 감속기가 ν•˜λ‚˜λΏ 일 수 μžˆμ§€λ§Œ μ—¬λŸ¬ 감속기가 μ‘λ‹΅ν•˜λŠ” 것은 Redux의 μ˜λ„ 된 μ‚¬μš© μ‚¬λ‘€μž…λ‹ˆλ‹€.

λΏ‘ 빡뀨

λ‘˜μ§Έ, λ™μΌν•œ 감속기가 μ—¬λŸ¬ μž‘μ—… μœ ν˜•μ„ μˆ˜μ‹ ν•˜κ³  λ™μΌν•œ λ°©μ‹μœΌλ‘œ 처리 ν•  수 β€‹β€‹μžˆμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” μ‹€μ œλ‘œ redux-actionsλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμ—ˆμœΌλ©° μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” μœ ν‹Έλ¦¬ν‹° λ©”μ†Œλ“œ combineAction이 μžˆλŠ”μ§€ λͺ°λžμŠ΅λ‹ˆλ‹€. 방금 그것을 μ°Ύμ•˜κ³  μœ„μ˜ μ§„μˆ μ€ λ˜‘κ°™μ€ 것을 μ–ΈκΈ‰ν•©λ‹ˆλ‹€. (더 λͺ…ν™• ν–ˆμ–΄μ•Ό ν–ˆμ–΄, λ―Έμ•ˆν•΄)
λ‹΅μž₯ ν•΄μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.

λ‚˜λŠ” Ducks κ°€ ActionTypesμ—μ„œ μ˜¬λ°”λ₯΄κ²Œ μ •μ˜ν•œλ‹€κ³  μƒκ°ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

npm-module-or-app / reducer / ACTION_TYPE ν˜•μ‹μ˜ μž‘μ—… μœ ν˜•μ΄ μžˆμ–΄μ•Όν•©λ‹ˆλ‹€.

κ·Έ μ΄μœ λŠ” ν•˜λ‚˜ μ΄μƒμ˜ λ¦¬λ“€μ„œκ°€ ν•˜λ‚˜μ˜ μ•‘μ…˜μ„ ꡬ독 ν•  수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. @mherodevκ°€ λ§ν–ˆλ“―μ΄ const ACTION = 'app/feature/ACTION'; 이 더 합리적이며 μΆ”κ°€λ‘œ const ACTION = 'action://app/feature/ACTION'; μž‘μ—… 에 λŒ€ν•œ μŠ€ν‚€λ§ˆ λ₯Ό

μ•‘μ…˜ μœ ν˜•μ„ μ‹λ³„ν•˜κΈ° μœ„ν•΄ κΈ€λ‘œλ²Œ 자체 증뢄 μ •μˆ˜λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ? 예

let id = 0

function generateActionType (label /* for readability */) {
  id++
  return `app/feature/${id}/${label}`
}

이것에 λŒ€ν•΄ 쑰금 μƒκ°ν•˜κ³ , λ‹€λ₯Έ κ°œλ°œμžμ™€ μΆ©λŒν•˜μ§€ μ•Šλ„λ‘ 린트 κ·œμΉ™μ„ μž‘μ„±ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.이 κ·œμΉ™μ€ 디렉토리λ₯Ό μ‘°μ‚¬ν•©λ‹ˆλ‹€ (λͺ¨λ“  λ¦¬λ“€μ„œκ°€ 있고 각 λ¦¬λ“€μ„œμ—λŠ” 자체 μž‘μ—… μœ ν˜•μ΄ μƒμˆ˜λ‘œ 있음).

λ™μΌν•œ 값을 가진 두 개의 μƒμˆ˜κ°€μžˆλŠ” 경우 μœ„λ°˜μ„λ³΄κ³ ν•˜λ„λ‘ linting을 κ³„νšν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

μ œμ•ˆμ΄ μžˆμœΌμ‹œλ©΄ μ•Œλ €μ£Όμ„Έμš” :)

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