【问题标题】:Save Position of dragged items with Dragula Drag and Drop, React Version (react-dragula)使用 Dragula 拖放保存拖动项目的位置,React 版本 (react-dragula)
【发布时间】:2016-10-03 12:23:11
【问题描述】:

我正在使用 react-dragula (react-dragula) 拖放元素。放置后如何保存物品位置。

  dragDecorator = () => {
            let options = { };
            Dragula([componentBackingInstance], options);
          }; 

     <div className="wrapper" ref={this.dragDecorator}>
       <div className="container col-md-4" id="0">
         <div className="panel panel-white" id="A1">
         </div>
         <div className="panel panel-white" id="A2">
        </div>
       </div>
       <div className="container col-md-4" id="0">
         <div className="panel panel-white" id="B1">
         </div>
         <div className="panel panel-white" id="B2">
        </div>
       </div>
    </div>

【问题讨论】:

    标签: javascript reactjs dragula react-dragula


    【解决方案1】:
      dragDecorator = (componentBackingInstance) => {
        if (componentBackingInstance) {
          let options = {};
    
          const dragula = Dragula([componentBackingInstance], options);
          dragula.on('drop', (el, target, source, sibling) => {
            const newColumnIndex = parseInt(get(target, 'id'));
            const previousColumnIndex = parseInt(get(source, 'id'));
            const belowId = get(sibling, 'id');
            const itemId = get(el, 'id');
    
            let columns = this.state.columns;
            if (belowId === undefined) {
              const newItemIndex = columns[newColumnIndex].items.length;
              columns[previousColumnIndex].items.splice(columns[previousColumnIndex].items.indexOf(itemId), 1);
              columns[newColumnIndex].items.splice(newItemIndex, 0, itemId);
              this.setState({columns});
            }
            else {
              const newItemIndex = columns[newColumnIndex].items.indexOf(belowId);
              columns[previousColumnIndex].items.splice(columns[previousColumnIndex].items.indexOf(itemId), 1);
              columns[newColumnIndex].items.splice(newItemIndex, 0, itemId);
              this.setState({columns});
            }
    
            if (this.props.onDrag !== undefined) {
              this.props.onDrag(columns);
            }
          })
        }
      };
    

    Columns 将返回一个数组,其中包括基于其 ID 的每列中拖动项目的新位置。

    【讨论】:

    • 嘿,这种情况有什么解决方案?列表状态是对象数组,this.state.files = [{ name: 'a', order: 0 }, { name: 'b', order: 1 }, {name: 'c', order: 2}]在渲染方法中,我正在映射状态数组,它是 Dragula 容器。如何根据 drop 方法更新状态?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    • 1970-01-01
    相关资源
    最近更新 更多