使用React高阶组件 - 特定反应 - 可排序 - 特定

时间:2016-06-10 15:02:44

标签: list reactjs drag-and-drop npm higher-order-functions

我无法理解这个HOC的一个非常基本的部分,它对NPM有很好的吸引力所以我猜这里有一个简单的答案:

我预先存在的组件在NPM给出的示例中的位置。 {value}是否应该替换为<myComponent />?我知道这些包装器应该将我的组件(在本例中为组件)作为参数,但我认为我在这里缺少一些组件。任何帮助赞赏。他的示例文档在

下面
import React, {Component} from 'react';
import {render} from 'react-dom';
import {SortableContainer, SortableElement, arrayMove} from 'react-sortable-list-hoc';

const SortableItem = SortableElement(({value}) => <li>{value}</li>);

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

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} />
        )
    }
}

render(<SortableComponent/>, document.getElementById('root'));

1 个答案:

答案 0 :(得分:1)

SortableElement会将您的组件包装起来,以便从react-sortable-hoc功能中受益。所以你必须写那样的东西(假设<myComponent />是列表的一个元素):

const SortableItem = SortableElement(myComponent);

这将创建一个列表元素,用于呈现myComponent其他功能。

({value}) => <li>{value}</li>是表示React组件的无状态函数。你可以写:

const myComponent = ({value}) => <li>{value}</li>;
const SortableItem = SortableElement(myComponent);