рдЬрдм рдореИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреАрдПрдирдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓реАред
рдкреНрд░рд╢реНрди, рдореИрдВ ConnectDropTarget рдШрдЯрдХ рдореЗрдВ рдкреНрд░реЗрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
const dropTodoTarget = {
drop(props,monitor,component) {
var todo = monitor.getItem();
if (todo.board_id != props.board_id) {
component.localHandleMove(todo.todo_id);
}
return {};
}
};
function collect(connect, monitor) {
return {
connectDropTarget: connect.dropTarget(),
isOver: monitor.isOver()
};
}
export default class TodoList extends Component {
constructor(props) {
super(props);
this.localHandleMove = this.localHandleMove.bind(this);
}
localHandleMove(todo_id) {
this.props.dispatch(actions.completeTodo(todo_id,this.props.board_id))
}
render() {
const { connectDropTarget } = this.props;
//
return connectDropTarget(
<ul className="todo-list">
{this.props.todos.map(function(todo){
return <Todo key={todo.todo_id} todo={todo} />
})}
</ul>
);
}
}
export default flow(
connect(),
DropTarget(ItemTypes.TODO, dropTodoTarget, collect)
)(TodoList);
рдЬрдм рдореИрдВрдиреЗ рдРрд╕рд╛ рд▓рд┐рдЦрд╛ рдерд╛ред
Uncaught TypeError: component.localHandleMove is not a function
рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдПрдХ рдШрдЯрдХ рдореЗрдВ рдкреНрд░реЗрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?
рдзрдиреНрдпрд╡рд╛рдж
рдЕрдВрдд рдореЗрдВ, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдРрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
const dropTodoTarget = {
drop(props,monitor,component) {
var todo = monitor.getItem();
if (todo.board_id != props.board_id) {
component.store.dispatch(actions.moveTodoBoard(todo.todo_id,todo.board_id,props.board_id));
}
return {};
}
};
рдирд╣реАрдВ, component.store
рдПрдХ рдЖрд╡реГрддреНрддрд┐ рдЪрд░ рд╣реИ рдЬреЛ рдПрдХ рдирд┐рдЬреА рдПрдкреАрдЖрдИ рд╣реИ рдФрд░ рдХрд╣реАрдВ рднреА рдкреНрд░рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рд╣реИред рдпрд╣ рд░рд┐рдПрдХреНрдЯ рд░реЗрдбрдХреНрд╕ рдХреЗ рдХрд┐рд╕реА рднреА рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреГрдкрдпрд╛ рдЗрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рди рдХрд░реЗрдВред
рдЖрдк рдЬреЛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣ connect()
_after_ DropTarget()
connect()
рдбрд╛рд▓рдирд╛ рд╣реИ рддрд╛рдХрд┐ рдбреНрд░реЙрдк рд▓рдХреНрд╖реНрдп рдореЗрдВ рдЖрдкрдХреЗ рд▓рд┐рдП connect()
( dispatch
) рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдП рдЧрдП рдкреНрд░реЛрдк рдЙрдкрд▓рдмреНрдз рд╣реЛрдВ:
const dropTodoTarget = {
drop(props,monitor,component) {
var todo = monitor.getItem();
if (todo.board_id != props.board_id) {
props.dispatch(actions.completeTodo(todo.board_id,this.props.board_id))
}
return {};
}
};
// ...
export default flow(
DropTarget(ItemTypes.TODO, dropTodoTarget, collect),
connect()
)(TodoList);
рдЖрдк рдЬреЛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣ DropTarget() рдХреЗ рдмрд╛рдж рдХрдиреЗрдХреНрдЯ() рдбрд╛рд▓рдирд╛ рд╣реИ ...
рдХреНрдпрд╛ рдпрд╣ рдкрд╣рд▓реЗ рдирд╣реАрдВ рдЖрдирд╛ рдЪрд╛рд╣рд┐рдП?
рдирд╣реАрдВ,
component.store
рдПрдХ рдЖрд╡реГрддреНрддрд┐ рдЪрд░ рд╣реИ рдЬреЛ рдПрдХ рдирд┐рдЬреА рдПрдкреАрдЖрдИ рд╣реИ рдФрд░ рдХрд╣реАрдВ рднреА рдкреНрд░рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рд╣реИред рдпрд╣ рд░рд┐рдПрдХреНрдЯ рд░реЗрдбрдХреНрд╕ рдХреЗ рдХрд┐рд╕реА рднреА рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреГрдкрдпрд╛ рдЗрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рди рдХрд░реЗрдВредрдЖрдк рдЬреЛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣
connect()
_after_DropTarget()
connect()
рдбрд╛рд▓рдирд╛ рд╣реИ рддрд╛рдХрд┐ рдбреНрд░реЙрдк рд▓рдХреНрд╖реНрдп рдореЗрдВ рдЖрдкрдХреЗ рд▓рд┐рдПconnect()
(dispatch
) рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдП рдЧрдП рдкреНрд░реЛрдк рдЙрдкрд▓рдмреНрдз рд╣реЛрдВ:const dropTodoTarget = { drop(props,monitor,component) { var todo = monitor.getItem(); if (todo.board_id != props.board_id) { props.dispatch(actions.completeTodo(todo.board_id,this.props.board_id)) } return {}; } }; // ... export default flow( DropTarget(ItemTypes.TODO, dropTodoTarget, collect), connect() )(TodoList);
рдпрд╣рд╛рдБ flow
рдХреНрдпрд╛ рд╣реИ?
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдирд╣реАрдВ,
component.store
рдПрдХ рдЖрд╡реГрддреНрддрд┐ рдЪрд░ рд╣реИ рдЬреЛ рдПрдХ рдирд┐рдЬреА рдПрдкреАрдЖрдИ рд╣реИ рдФрд░ рдХрд╣реАрдВ рднреА рдкреНрд░рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рд╣реИред рдпрд╣ рд░рд┐рдПрдХреНрдЯ рд░реЗрдбрдХреНрд╕ рдХреЗ рдХрд┐рд╕реА рднреА рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреГрдкрдпрд╛ рдЗрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рди рдХрд░реЗрдВредрдЖрдк рдЬреЛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣
connect()
_after_DropTarget()
connect()
рдбрд╛рд▓рдирд╛ рд╣реИ рддрд╛рдХрд┐ рдбреНрд░реЙрдк рд▓рдХреНрд╖реНрдп рдореЗрдВ рдЖрдкрдХреЗ рд▓рд┐рдПconnect()
(dispatch
) рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдП рдЧрдП рдкреНрд░реЛрдк рдЙрдкрд▓рдмреНрдз рд╣реЛрдВ: