рдореИрдВ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕реБрдЭрд╛рд╡ рдвреВрдВрдв рд░рд╣рд╛ рд╣реВрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд▓реИрдВрдбрд┐рдВрдЧ рдкреГрд╖реНрда рд╣реИ рдЬрд╣рд╛рдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЦреАрдВрдЪ рдФрд░ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рд╛рдЗрди рдЕрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рдбреНрд░реИрдЧ рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХрд╣реАрдВ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ Redux рд╕реНрдерд┐рддрд┐ рдХреЗрд╡рд▓ рд╕рд╛рджреЗ JS рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рд░рдЦрдиреЗ рд╡рд╛рд▓реА рд╣реИ, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХрд╣рд╛рдБ рд░рдЦрд╛ рдЬрд╛рдПред рдореИрдВ рдЗрд╕реЗ рдХреБрдЫ рд░рд┐рдПрдХреНрдЯ рд╕реНрдЯреЗрдЯ/рдкреНрд░реЛрдк рдореЗрдВ рдкрдХрдбрд╝ рд╕рдХрддрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдЕрдВрддрддрдГ рд╕рд╣реА рдШрдЯрдХ рдХреЛ рдкрд╛рд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдП, рдЖрджрд┐ред
рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди store.subscribe рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рд╛рдЬреНрдп рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЛрд░ рдХреЛ рд╕реБрдирдирд╛ рд╣реЛрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ connect(...)
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ 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
рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдХреНрд░рдордмрджреНрдзрддрд╛ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧреАред