React-dnd: рдореИрдВ ConnectDropTarget рдШрдЯрдХ рдореЗрдВ рдкреНрд░реЗрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 26 рдлрд╝рд░ре░ 2016  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: 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 рдПрдХ рдЖрд╡реГрддреНрддрд┐ рдЪрд░ рд╣реИ рдЬреЛ рдПрдХ рдирд┐рдЬреА рдПрдкреАрдЖрдИ рд╣реИ рдФрд░ рдХрд╣реАрдВ рднреА рдкреНрд░рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рд╣реИред рдпрд╣ рд░рд┐рдПрдХреНрдЯ рд░реЗрдбрдХреНрд╕ рдХреЗ рдХрд┐рд╕реА рднреА рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреГрдкрдпрд╛ рдЗрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рди рдХрд░реЗрдВред

рдЖрдк рдЬреЛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣ 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);

рд╕рднреА 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 рдПрдХ рдЖрд╡реГрддреНрддрд┐ рдЪрд░ рд╣реИ рдЬреЛ рдПрдХ рдирд┐рдЬреА рдПрдкреАрдЖрдИ рд╣реИ рдФрд░ рдХрд╣реАрдВ рднреА рдкреНрд░рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рд╣реИред рдпрд╣ рд░рд┐рдПрдХреНрдЯ рд░реЗрдбрдХреНрд╕ рдХреЗ рдХрд┐рд╕реА рднреА рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреГрдкрдпрд╛ рдЗрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рди рдХрд░реЗрдВред

рдЖрдк рдЬреЛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣ 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 рдХреНрдпрд╛ рд╣реИ?

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

yaoyuande picture yaoyuande  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

rubayethossain picture rubayethossain  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Vadorequest picture Vadorequest  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

vickyvxr picture vickyvxr  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

bebbi picture bebbi  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ