Используйте библиотеку javascript внутри веб-приложения TypeScript React

Я пытаюсь вставить графический редактор в компонент React, но проект настроен на TypeScript < / сильный>.

Для JointJS нет обновленных привязок, поэтому я попробовал следующее: Рендеринг кода, поступающего из JointJS, в компонент React в файле .jsx.

Файл: Joint-editor.jsx

import React from 'react'
import $ from 'jquery'
import joint from 'jointjs'

export default class JointEditor extends React.Component {

  constructor(props){
    super(props)
  }

  render(){
    var graph = new joint.dia.Graph;

      //JointJS code using jQuery

      graph.addCells([rect, rect2, link]);

      return (<div id="myholder"></div>)
  }

}

А затем импорт этого компонента в другой компонент в файле .tsx.

Файл editor.tsx

import React = require('react')
import Header = require("./../Header/header")
import JointEditor = require('./joint-editor')

class DemoProps {
    public name: string;
    public age: string;
}

export class Editor extends React.Component<DemoProps, {}> {
    private foo: number;

    constructor(props: DemoProps) {
        super(props);
        this.foo = 42;
    }

    render() {
        return (
            <div>
                <Header.Header/>
                <JointEditor/>
                Hello {this.props.name}, you are {this.props.age} years old
                </div>
        );
    }
}

Это связывается с веб-пакетом и передается Babel (файл jsx) и TypeScript (tsx).

Теперь возникают 2 проблемы:

  1. ОШИБКА в ... / editor.tsx (3,30): ошибка TS2307: не удается найти модуль './joint-editor'.

  2. Я почти уверен, что возникнут проблемы с JointJS с использованием jQuery внутри метода render () React? Знаете ли вы какие-либо примеры, в которых jQuery успешно используется внутри компонента React?

Спасибо

ИЗМЕНИТЬ

Это мой webpack.config.js

var webpack=require('webpack');
module.exports={
    entry: ['./src/main.tsx'],
    output: {
        path: './target',
        publicPath: "/assets/",
        filename: 'bundle.js'
    },
    debug: true,
    devtool: 'cheap-eval-source-map',
    plugins: [
        new webpack.optimize.DedupePlugin(),
        new webpack.optimize.UglifyJsPlugin({minimize: true})
    ],
    resolve: {
        extensions: ['',  '.jsx','.ts', '.js', '.tsx',]
    },
    module: {
        loaders: [
            {
                test: /\.tsx$/,
                loader: 'react-hot!ts-loader'
            },{
                test:/\.jsx$/,
                exclude: /(node_modules|bower_components)/,
                loader:"react-hot!babel-loader"
            },
            {
                test:/\.js$/,
                exclude: /(node_modules|bower_components)/,
                loader:"babel-loader"
            }
        ]
    }
}

person Shady    schedule 30.10.2015    source источник
comment
расширение вашего joint-editor - .jsx, которое является узлом расширения / ts не разрешаются по умолчанию .   -  person Dan    schedule 30.10.2015
comment
@DanPantry да, поэтому я настроил webpack на использование BabelJS в качестве загрузчика при обнаружении файлов JSX.   -  person Shady    schedule 30.10.2015
comment
это нормально, но машинописный текст этого не распознает (скорее всего)   -  person Dan    schedule 30.10.2015
comment
хорошо, но разве он не должен отображаться, потому что все упаковано в bundle.js?   -  person Shady    schedule 30.10.2015
comment
Я больше обращаюсь к вашей первой ошибке - editor.tsx не сможет "найти" joint-editor из-за ее расширения. Вам необходимо установить resolve.extensions в конфигурации вашего веб-пакета, чтобы включить .tsx и .jsx   -  person Dan    schedule 30.10.2015
comment
Вот что я делаю, см. Мой обновленный ответ @DanPantry   -  person Shady    schedule 30.10.2015


Ответы (1)


1- import JointEditor from './joint-editor'

2- Переместите свой код jQuery в метод componentDidMount() (отображается DOM)

const div = ReactDOM.findDOMNode(this)

HTMLDivElement, который является корнем вашего элемента React

person Bruno Grieder    schedule 30.10.2015
comment
Не удалось заставить его работать с файлом jsx, но я нашел рабочие привязки для JointJS на DefinentyTyped, и подход через componentDidMount работает хорошо. Спасибо. - person Shady; 30.10.2015