是的,将 React 组件集成到 Aurelia 应用程序中真的很容易。在这里查看我的项目:https://github.com/ashleygrant/aurelia-loves-react
我什至没有使用你提到的加载器插件。
以下是在 Aurelia 自定义元素中包装第三方 React 组件的方法:
import React from 'react';
import ReactDOM from 'react-dom';
import ReactDatePicker from 'react-datepicker';
import { noView, bindable, inject } from 'aurelia-framework';
@noView(['react-datepicker/react-datepicker.css'])
@inject(Element)
export class DatePicker {
@bindable selectedDate;
@bindable onChange;
constructor(element) {
this.element = element;
}
selectedDateChanged() {
this.render();
}
render() {
ReactDOM.render(
<ReactDatePicker
selected={this.selectedDate}
onChange={date => this.onChange({ date: date })}
/>,
this.element
);
}
// How to use native DOM events to pass the changed date
/*render() {
ReactDOM.render(
<ReactDatePicker
selected={this.selectedDate}
onChange={date => {
let event = new CustomEvent('change', { 'detail': date });
// Dispatch the event.
this.element.dispatchEvent(event);
}
}
/>,
this.element
);
}*/
}
下面是在使用作为 Aurelia 项目一部分的自定义反应组件时如何做到这一点:
import React from 'react';
import ReactDOM from 'react-dom';
import { noView, bindable, inject } from 'aurelia-framework';
import FormattedDate from '../react-components/formatted-date';
@noView()
@inject(Element)
export class ReactDate {
@bindable date;
@bindable format = 'dddd, MMMM D, YYYY';
constructor(element) {
this.element = element;
}
dateChanged() {
this.render();
}
formatChanged() {
this.render();
}
render() {
ReactDOM.render(
<FormattedDate
date={this.date}
format={this.format}
/>,
this.element
);
}
}
如您所见,它非常简单。我喜欢手工而不是使用加载器,因为我可以为每个属性设置数据绑定,因此它以更“Aurelia-ey”的方式工作。