我正在尝试使用scalajs-react
库使用来自Scala.js的this 更高阶反应组件。
以下是如何使用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>
涉及(props) => { var value = props.value; return <li>{value}</li> }
和<li>{value}</li>
JSX desugars to React.createElement("li", null, value );
,但问题是我不知道如何翻译此表达式({{1}转入Scala.JS。
(React.createElement("li", null, value );
最终here作为包装组件)
我需要在Scala.JS中编写什么才能获得相当于({value}) => <li>{value}</li>
的内容?
要点:
换句话说,如果在JS中我编写React.createElement("li", null, value )
并且生成的对象被称为var element=React.createElement("li", null, value )
,那么什么是Scala.JS表达式,其评估为完全相同的element
对象(element
)?
相关问题是here。
答案 0 :(得分: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" )
item2
和React.createElement("li", null, "bla42" )
来确认: