рдореИрдВ рдЕрдкрдиреЗ рдШрдЯрдХ рдХреЛ рд░реЗрдбрдХреНрд╕ рдХреЛ рд╣реБрдХ рдХрд░рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рдЬрд╛рдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдПрдХ рдбреНрд░реЙрдк рд▓рдХреНрд╖реНрдп рднреА рд╣реЛрддрд╛ рд╣реИред
export default DropTarget(dragTypes, storyTarget, collect)(connect(mapStateToProps)(StoryEditor));
рдЗрд╕ рд╕рдордп рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рд╕рд╣реА рд╣реИред
рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХрд░реВрдБрдЧрд╛:
import { compose } from 'redux'
export default compose(
DropTarget(dragTypes, storyTarget, collect),
connect(mapStateToProps)
)(StoryEditor);
рд░рд┐рдПрдХреНрдЯ рдбреАрдПрдирдбреА рдбреЙрдХреНрд╕ рдореЗрдВ _.flow рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рддреЛ рдЕрдЧрд░ рдореИрдВ рдЗрд╕ рдЕрдзрд┐рдХрд╛рд░ рдХреЛ рдкрдврд╝ рд░рд╣рд╛ рд╣реВрдВ рддреЛ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░реЗрдбрдХреНрд╕ рд╕реЗ compose
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣реИ рдирд╛?
@ ekeric13 Redux рдХрд╛ compose
рдЙрд▓реНрдЯреЗ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде _.flow
рд╕рдорд╛рди рд╣реИред рдЕрд░реНрдерд╛рддреН,
compose(f, g, h)(x) === flow(h, g, f)(x) === f(g(h(x)))
@gaearon compose
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ compose
рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рд╣реИ рдХрд┐ рдЧреИрд░ рд╕рд╣реА рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдлрд┐рд░ рднреА рд╣рдо рддреАрди рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ DropTarget
ред рдпрд╣ рдХреНрдпреЛрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?
рд▓рд┐рдЦреЗрдВ (... рдлрд╝рдВрдХреНрд╢рди)
рджрд╛рдПрдВ рд╕реЗ рдмрд╛рдПрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд░рдЪрдирд╛ рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд░реВрдк рдореЗрдВ Redux рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИред
рдЖрдк рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдХрдИ рд╕реНрдЯреЛрд░ рдПрдиреНрд╣рд╛рдВрд╕рд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред
рдмрд╣рд╕
(рддрд░реНрдХ): рд░рдЪрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпред рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдЗрд╕рдХрд╛ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдмрд╛рдИрдВ рдУрд░ рдЦрдбрд╝реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдЕрдкрд╡рд╛рдж рд╕рдмрд╕реЗ рд╕рд╣реА рддрд░реНрдХ рд╣реИ рдЬреЛ рдХрдИ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд░рд┐рдгрд╛рдореА рд░рдЪрдирд╛ рд╕рдорд╛рд░реЛрд╣ рдХреЗ рд▓рд┐рдП рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред
BuilderArea.propTypes = {
addPanel: PropTypes.func.isRequired
};
const mapStateToProps = state => ({
panels: state.panels
});
export default compose(
DropTarget(Types.PANEL_CARD, builderAreaTarget, (connect, monitor) => ({
connectDropTarget: connect.dropTarget(),
isOver: monitor.isOver()
})),
connect(
mapStateToProps,
{ addPanel }
)
)(BuilderArea);
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХрд░реВрдБрдЧрд╛: