react-DNDλ₯Ό μ¬μ©ν λ λ¬Έμ κ° λ°κ²¬λμμ΅λλ€.
μ§λ¬Έ, 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
λ λΉκ³΅κ° APIμ΄λ©° μ΄λμλ λ¬Έμνλμ§ μμ μΈμ€ν΄μ€ λ³μμ
λλ€. React Reduxμ λͺ¨λ λ²μ μμ μ¬λΌμ§ μ μμΌλ―λ‘ κ·Έκ²μ μμ‘΄νμ§ λ§μμμ€.
μνλ κ²μ connect()
( dispatch
)μ μν΄ μ£Όμ
λ μνμ λλ‘ λμμμ μ¬μ©ν μ μλλ‘ connect()
_after_ DropTarget()
connect()
λ£λ κ²μ
λλ€.
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() λ€μ connect()λ₯Ό λ£λ κ²μ λλ€...
κ·Έμ μ μμΌνλκ±° μλκ°?
μλμ,
component.store
λ λΉκ³΅κ° APIμ΄λ©° μ΄λμλ λ¬Έμνλμ§ μμ μΈμ€ν΄μ€ λ³μμ λλ€. React Reduxμ λͺ¨λ λ²μ μμ μ¬λΌμ§ μ μμΌλ―λ‘ κ·Έκ²μ μμ‘΄νμ§ λ§μμμ€.μνλ κ²μ
connect()
(dispatch
)μ μν΄ μ£Όμ λ μνμ λλ‘ λμμμ μ¬μ©ν μ μλλ‘connect()
_after_DropTarget()
connect()
λ£λ κ²μ λλ€.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
λ λΉκ³΅κ° APIμ΄λ©° μ΄λμλ λ¬Έμνλμ§ μμ μΈμ€ν΄μ€ λ³μμ λλ€. React Reduxμ λͺ¨λ λ²μ μμ μ¬λΌμ§ μ μμΌλ―λ‘ κ·Έκ²μ μμ‘΄νμ§ λ§μμμ€.μνλ κ²μ
connect()
(dispatch
)μ μν΄ μ£Όμ λ μνμ λλ‘ λμμμ μ¬μ©ν μ μλλ‘connect()
_after_DropTarget()
connect()
λ£λ κ²μ λλ€.