0

我正在尝试使用库中的 Scala.js使用这个 更高阶的反应组件。scalajs-react

这是一个关于如何在 JS 中使用该组件的示例:

import React, {Component} from 'react';
import {render} from 'react-dom';
import {SortableContainer, SortableElement, arrayMove} from 'react-sortable-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'));

表达式({value}) => <li>{value}</li>desugars to(props) => { var value = props.value; return <li>{value}</li> }<li>{value}</li>JSX desugars toReact.createElement("li", null, value );但问题是我不知道如何将这个表达式 ( React.createElement("li", null, value );) 翻译成 Scala.JS。

({value}) => <li>{value}</li>最终在这里作为一个包装的组件)

我需要在 Scala.JS 中编写什么才能获得等价物React.createElement("li", null, value )

概括:

换句话说,如果我在 JS 中编写var element=React.createElement("li", null, value )并调用了生成的对象element,那么计算结果为完全相同的element对象 ( val element = ???) 的 Scala.JS 表达式是什么?

相关问题在这里

4

1 回答 1

0
object Test
{
  def createItem(itemText: String): ReactTagOf[LI] = <.li(_react_fragReactNode(itemText)(reactNodeInhabitableS))
}

object ScalaJSExample extends js.JSApp {
  def main(): Unit = {

    val item = Test.createItem("bla42")
    val item2: ReactElement = item

}

item2是相同的React.createElement("li", null, "bla42" )

通过检查item2React.createElement("li", null, "bla42" )在浏览器中确认:

在此处输入图像描述

于 2016-10-07T19:37:49.083 回答