我们可以将反应组件整合到Aurelia项目中吗?

Har*_*dar 4 reactjs aurelia

我创建了一个react组件并使用webpack构建它并部署在服务器上.我想将这个组件集成到Aurelia项目中.

我尝试使用下面的npm模块:https://www.npmjs.com/package/aurelia-react-loader

在上面提到的模块中,组件名称需要传递给html文件.比如示例my-react-component.js正在传递到html文件中.

但我的React组件使用下面的代码加载到html标签中的root:

    import React from 'react';
    import ReactDOM from 'react-dom';
    import App from './App';
    ReactDOM.render((
      <App/>
    ), document.getElementById('root'));
Run Code Online (Sandbox Code Playgroud)

并且在运行webpack模块之后,它正在创建一个名为index_bundle.js文件的JavaScript 文件.这里导入的App模块是主要的js组件.它通过ReactDOM渲染到根元素的index.html中.

所以我不确定,我如何将React组件链接或url集成到Aurelia应用程序中?

如果您有任何疑问,请告诉我.我可以做详细解释.

提前致谢.哈里什

Ash*_*ant 9

是的,将反应组件集成到Aurelia应用程序中非常容易.看看我的项目我在这里做的:https://github.com/ashleygrant/aurelia-loves-react

我甚至没有使用你提到的加载器插件.

以下是如何在Aurelia自定义元素中包装第三方反应组件:

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
    );
  }*/
}
Run Code Online (Sandbox Code Playgroud)

以下是使用作为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
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,它非常简单.我喜欢手工而不是使用装载器,因为我可以为每个属性设置数据绑定,因此它以更"Aurelia-ey"的方式工作.