React-dnd: connectDropTarget ꡬ성 μš”μ†Œμ—μ„œ λ””μŠ€νŒ¨μΉ˜λ₯Ό β€‹β€‹μ‚¬μš©ν•˜λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Ό ν•©λ‹ˆκΉŒ?

에 λ§Œλ“  2016λ…„ 02μ›” 26일  Β·  4μ½”λ©˜νŠΈ  Β·  좜처: react-dnd/react-dnd

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

ꡬ성 μš”μ†Œμ—μ„œ λ””μŠ€νŒ¨μΉ˜λ₯Ό β€‹β€‹μ–΄λ–»κ²Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

감사 ν•΄μš”

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

μ•„λ‹ˆμš”, 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);

λͺ¨λ“  4 λŒ“κΈ€

λ§ˆμΉ¨λ‚΄ λ‚˜λŠ” λ‹€μŒκ³Ό 같이 ν•  수 μžˆμŒμ„ λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€.

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 λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰