wenn ich reag-DND benutze, habe ich ein Problem gefunden.
Frage, ich möchte Dispatch in einer connectDropTarget-Komponente verwenden.
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);
als ich so schrieb.
Uncaught TypeError: component.localHandleMove is not a function
Ich möchte, wie kann ich den Versand in einer Komponente verwenden?
Danke
Schließlich fand ich heraus, dass es so gehen könnte:
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 {};
}
};
Nein, component.store
ist eine Instanzvariable, die eine private API ist und nirgendwo dokumentiert ist. Es könnte in jeder Version von React Redux verschwunden sein, also verlassen Sie sich bitte nicht darauf.
Was Sie wollen, ist, connect()
_after_ DropTarget()
damit Requisiten, die von connect()
(einschließlich dispatch
) injiziert wurden, Ihnen im Drop-Ziel zur Verfügung stehen:
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);
Was Sie wollen, ist connect() nach DropTarget() zu setzen...
Sollte es nicht früher kommen?
Nein,
component.store
ist eine Instanzvariable, die eine private API ist und nirgendwo dokumentiert ist. Es könnte in jeder Version von React Redux verschwunden sein, also verlassen Sie sich bitte nicht darauf.Was Sie wollen, ist,
connect()
_after_DropTarget()
damit Requisiten, die vonconnect()
(einschließlichdispatch
) injiziert wurden, Ihnen im Drop-Ziel zur Verfügung stehen: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);
Was ist hier flow
?
Hilfreichster Kommentar
Nein,
component.store
ist eine Instanzvariable, die eine private API ist und nirgendwo dokumentiert ist. Es könnte in jeder Version von React Redux verschwunden sein, also verlassen Sie sich bitte nicht darauf.Was Sie wollen, ist,
connect()
_after_DropTarget()
damit Requisiten, die vonconnect()
(einschließlichdispatch
) injiziert wurden, Ihnen im Drop-Ziel zur Verfügung stehen: