2017-07-07 49 views
1

我正在嘗試使用react-sortable-hoc的示例。可排序無法保持排序狀態。看看GIF。react-sortable-hoc reactJS庫排序問題

enter image description here

下面是我的示例代碼..

import React, {Component} from 'react'; 
import {SortableContainer, SortableElement, arrayMove} from 'react-sortable- 
hoc'; 
// Css 
import './object_library.css' 

const SortableItem = SortableElement(({value}) => 
<div className="Showcase_test_horizontalItem" > 
    <div>{value}</div> 
    <br /> 
    <TestSortable /> 
</div> 
); 

const SortableList = SortableContainer(({items}) => { 
return (
    <div> 
     {items.map((value, index) => (
      <SortableItem key={`item-${index}`} index={index} value={value} 
/> 
     ))} 
    </div> 
); 
}); 

class TestSortable extends Component { 
constructor(props) { 
    super(props); 
    this.state = { 
     sum: 0 
    } 
    this.onAddChild = this.onAddChild.bind(this) 
} 
onAddChild() { 
    let prevSum = this.state.sum + 1; 
    this.setState({ 
     sum: prevSum 
    }); 
} 
render() { 
    return (
     <div> 
      <div> {this.state.sum} </div> 
      <button className="my_plus_buttons" onClick={this.onAddChild}>+ 
      </button> 
     </div> 
    ); 
    } 
} 

class SortableComponent extends Component { 
state = { 
    items: ['Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item 5', 'Item 6'], 
}; 
onSortEnd = ({oldIndex, newIndex}) => { 
    this.setState({ 
     items: arrayMove(this.state.items, oldIndex, newIndex), 
    }); 
}; 
render() { 
    return <SortableList items={this.state.items} onSortEnd={this.onSortEnd} 
    axis="x"/>; 
    } 
} 

export default SortableComponent; 

不知道爲什麼,這個庫是不是保持狀態?

感謝

回答

0

在你SortableList,你設置基於當前索引,這是做正常的事情的關鍵,但它似乎是什麼原因造成的問題。使關鍵字匹配值,而它似乎按預期工作。

我猜想關鍵需要與底層組件一起移動。

const SortableList = SortableContainer(({ items }) => { 
    return (
    <div> 
     {items.map((value, index) => (
     <SortableItem key={`item-${value}`} index={index} value={value} /> 
    ))} 
    </div> 
); 
}); 
+0

感謝它的工作!我遺漏了SortableItem中的鍵 – HarshMakadia