νμΌ μ λ‘λ μ²λ¦¬μ λν μ μμ μ°Ύκ³ μμ΅λλ€. μ¬μ©μκ° νμΌμ λμ΄λ€ λμ μ μκ³ νμΌ μ λ‘λκ° μμλκΈ° μ μ κ°μ νλΌλ λ©μμ§κ° νμλλ λ°©λ¬Έ νμ΄μ§κ° μμ΅λλ€. λλκ·Έν νμΌ κ°μ²΄λ₯Ό μ΄λκ°μ 보κ΄ν΄μΌ νμ§λ§ Redux μνλ μΌλ° JS κ°μ²΄λ§ 보κ΄ν΄μΌ νλ―λ‘ ν΄λΉ νμΌ κ°μ²΄λ₯Ό μ΄λμ λμ§ λͺ¨λ₯΄κ² μ΅λλ€. μΌλΆ React μν/μνμ 보κ΄ν μ μμ§λ§ κ²°κ΅ μ¬λ°λ₯Έ κ΅¬μ± μμ λ±μ μ λ¬λμλμ§ νμΈν΄μΌ ν©λλ€.
ν κ°μ§ κ°λ₯ν ν΄κ²°μ±
μ connect(...)
μ¬μ©νμ¬ store.subscribe μ μ‘μΈμ€νλ λ°©λ²μ μ λͺ¨λ₯΄μ§λ§ store.subscribe λ₯Ό μ¬μ©νμ¬ μν λ³κ²½μ λν μ μ₯μλ₯Ό μμ νλ κ²μ
λλ€. μλ§λ this.context.store.subscribe()
?
@olalonde μνκ° μ§λ ¬ν κ°λ₯ν΄μΌ νλ€λ κΆμ₯ μ¬νμ λΆλλ¬μ΄ κ²μ λλ€. ν΄λΌμ΄μΈνΈμμ μνλ₯Ό μννκ±°λ μ΄λκ°λ‘ 보λ΄κΈ° μν΄ μνλ₯Ό μ§λ ¬νν μ μμ΄μΌ νκΈ° λλ¬Έμ μ£Όλ‘ μ¬μ΄ μλ² μΈ‘ λ λλ§ λ° μν μ€λ μ·μ μ©μ΄νκ² νκΈ° μν΄ μ‘΄μ¬ν©λλ€. μ΄κ²μ μμ ν ν΄λΌμ΄μΈνΈμμ μνλλ―λ‘ μΆκ° μ²λ¦¬λ₯Ό μν΄ ν΄λΉ νμΌ κ°μ²΄λ₯Ό λ¨κΈ°μ μΌλ‘ μ μ₯νλ κ²μ΄ λμμ§ μμ μ μμ΅λλ€.
κ·Έλ¦¬κ³ μνλ₯Ό μ§λ ¬ννλλΌλ File
μ€λͺ
μλ κ°μ²΄ κ°μ²΄λ‘ μ§λ ¬νλλ―λ‘ μ§λ ¬ν μ€λ₯κ° λ°μνμ§ μμ΅λλ€.
κ°μ¬ ν΄μ. μ λ‘λ μμ μμ±κΈ°λ₯Ό λ€μ κΈ°λ₯μΌλ‘ λννμ΅λλ€.
waitIntroMessageShowedActionCreator.js
// delays execution of `fn` until `state.session.user.ui.introMessageShowed === true`
export const initWaitIntroMessageShowed = ({ getState, subscribe }) => (fn) => () => (
new Promise((resolve, reject) => {
const handleChange = () => {
const state = getState()
if (!state.session.user.ui) return null
if (!state.session.user.ui.introMessageShowed) return null
/* eslint-disable no-use-before-define */
unsubscribe()
return Promise
.resolve()
.then(() => fn())
.catch(reject)
.then(resolve)
}
const unsubscribe = subscribe(handleChange)
handleChange()
})
)
λ΄ κ΅¬μ± μμμμ :
class DragDropSignup extends Component {
constructor(props) {
super(props)
const waitIntroMessageShowed = initWaitIntroMessageShowed(this.props.store)
this.onSignupSuccess = waitIntroMessageShowed(this.onSignupSuccess.bind(this))
}
// ...
}
// ...
// pass store object as prop
const connectStore = () => (WrappedComponent) => {
const ConnectStore = (props, context) => (
<WrappedComponent store={context.store} {...props} />
)
ConnectStore.contextTypes = { store: React.PropTypes.object }
return ConnectStore
}
export default connectStore()(connect()(DragDropSignup))
λκ΅°κ°μκ² μ μ©ν κ²½μ°λ₯Ό λλΉνμ¬ μ¬κΈ°μ κ²μν©λλ€.
κ°μ₯ μ μ©ν λκΈ
@olalonde μνκ° μ§λ ¬ν κ°λ₯ν΄μΌ νλ€λ κΆμ₯ μ¬νμ λΆλλ¬μ΄ κ²μ λλ€. ν΄λΌμ΄μΈνΈμμ μνλ₯Ό μννκ±°λ μ΄λκ°λ‘ 보λ΄κΈ° μν΄ μνλ₯Ό μ§λ ¬νν μ μμ΄μΌ νκΈ° λλ¬Έμ μ£Όλ‘ μ¬μ΄ μλ² μΈ‘ λ λλ§ λ° μν μ€λ μ·μ μ©μ΄νκ² νκΈ° μν΄ μ‘΄μ¬ν©λλ€. μ΄κ²μ μμ ν ν΄λΌμ΄μΈνΈμμ μνλλ―λ‘ μΆκ° μ²λ¦¬λ₯Ό μν΄ ν΄λΉ νμΌ κ°μ²΄λ₯Ό λ¨κΈ°μ μΌλ‘ μ μ₯νλ κ²μ΄ λμμ§ μμ μ μμ΅λλ€.
κ·Έλ¦¬κ³ μνλ₯Ό μ§λ ¬ννλλΌλ
File
μ€λͺ μλ κ°μ²΄ κ°μ²΄λ‘ μ§λ ¬νλλ―λ‘ μ§λ ¬ν μ€λ₯κ° λ°μνμ§ μμ΅λλ€.