ReactDnD,能够创建一个简单的 DragDropContext - DragSource 示例
ReactDnD, enable to create a simple DragDropContext - DragSource example
我是 React 的新手,正在关注 this tutorial 将 Drag'n'Drop 添加到我的应用程序
我正在按照教程一步一步地创建一个带有可拖动骑士棋子的棋盘,但无法让它工作(仍然无法拖动骑士)
// imports
var {DragSource, DragDropContext} = ReactDnD;
var knightSource = {
beginDrag: function (props) {
return {};
}
};
function collect(connect, monitor) {
return {
connectDragSource: connect.dragSource(),
isDragging: monitor.isDragging()
}
}
var Knight = DragSource("knight", knightSource, collect)(React.createClass({
render() {
var style = {
cursor: 'move',
fontSize: 25
}
return(
<div style={style}>♘</div>
);
}
}));
var Board = DragDropContext(HTML5Backend)(React.createClass({
render() {
var style = {
width: '500px',
height: '500px',
border: '1px solid black',
boxShadow: '4px 2px 2px black'
}
return (
<div style={style}>
<Knight/>
</div>
);
}
}));
ReactDOM.render(
<Board/>,
document.getElementById('ex13')
);
});
谁能解释一下我做错了什么?
您正在使用 DragSource(itemType, source, collect) 正确包装 Knight 组件,但是在 knight 组件中您需要使用 this.props.connectDragSource 包装渲染 returns,类似于教程(我刚刚复制到这里):
render: function () {
var connectDragSource = this.props.connectDragSource;
var isDragging = this.props.isDragging;
return connectDragSource(
<div style={{
opacity: isDragging ? 0.5 : 1,
fontSize: 25,
fontWeight: 'bold',
cursor: 'move'
}}>
♘
</div>
);
}
注意他如何从 props 中获取 connectDragSource(并通过 collect 函数注入),然后用它包裹 div 标签。
我是 React 的新手,正在关注 this tutorial 将 Drag'n'Drop 添加到我的应用程序
我正在按照教程一步一步地创建一个带有可拖动骑士棋子的棋盘,但无法让它工作(仍然无法拖动骑士)
// imports
var {DragSource, DragDropContext} = ReactDnD;
var knightSource = {
beginDrag: function (props) {
return {};
}
};
function collect(connect, monitor) {
return {
connectDragSource: connect.dragSource(),
isDragging: monitor.isDragging()
}
}
var Knight = DragSource("knight", knightSource, collect)(React.createClass({
render() {
var style = {
cursor: 'move',
fontSize: 25
}
return(
<div style={style}>♘</div>
);
}
}));
var Board = DragDropContext(HTML5Backend)(React.createClass({
render() {
var style = {
width: '500px',
height: '500px',
border: '1px solid black',
boxShadow: '4px 2px 2px black'
}
return (
<div style={style}>
<Knight/>
</div>
);
}
}));
ReactDOM.render(
<Board/>,
document.getElementById('ex13')
);
});
谁能解释一下我做错了什么?
您正在使用 DragSource(itemType, source, collect) 正确包装 Knight 组件,但是在 knight 组件中您需要使用 this.props.connectDragSource 包装渲染 returns,类似于教程(我刚刚复制到这里):
render: function () {
var connectDragSource = this.props.connectDragSource;
var isDragging = this.props.isDragging;
return connectDragSource(
<div style={{
opacity: isDragging ? 0.5 : 1,
fontSize: 25,
fontWeight: 'bold',
cursor: 'move'
}}>
♘
</div>
);
}
注意他如何从 props 中获取 connectDragSource(并通过 collect 函数注入),然后用它包裹 div 标签。