Reputation: 608
How to import 3rd party React components to Typescript TSX files?
I have a pretty big JavaScript front-end project which uses:
I want to add two 3rd party React components:
To make things little clear, I have created a basic lightweight project that duplicates basic tools on the GitHub (https://github.com/mgrackerl/react-requirejs-example) where you can try your code.
About the sample project files:
To use the DatePicker, what I want as final result is something like this:
import React = require('react');
import ReactDOM = require('react-dom');
import DatePicker = require('react-datepicker');
let handleChange = function(date: Date) {
this.setState({
startDate: date
});
};
var myDivElement = <div>
<DatePicker
selected={new Date()}
onChange={handleChange} />
</div>;
ReactDOM.render(myDivElement, document.getElementById('example'));
Upvotes: 0
Views: 1210
Reputation: 608
After some digging in GitHub issues, finally, I have imported the DatePicker component.
Commit: https://github.com/mgrackerl/react-requirejs-example/commit/4afcd28db1ee0f5a9fa0fe65bf505e521814f562
Notes about importing react-datepicker component:
1) Have to bring typings files to the project to make Typescript compiler work (the github project dir: typings/react-datepicker)
2) For the DatePicker component, we have to use MomentJS (http://momentjs.com/) not a Javascript Date object.
scripts/main.tsx file:
/// <reference path="../typings/index.d.ts" />
import React = require('react');
import ReactDOM = require('react-dom');
import DatePicker = require('react-datepicker'); // 3rd party DatePicker component
import moment = require('moment'); // use for the DatePicker component
// callback function for DatePicker onChange event
let handleChange = function(){
return function(date:any) {
console.log("data is: " + date);
};
}
// Create new React component that consumes 3rd party DatePicker component
var myDivElement = <div>
<DatePicker
selected={moment()}
onChange={handleChange} />
</div>;
// Render newly create "myDivElement" component
ReactDOM.render(myDivElement, document.getElementById('example'));
And of course setup RequireJS settings:
require.config({
"urlArgs": "v=01",
"baseUrl": "",
"paths": {
"react": "node_modules/react/dist/react",
"react-dom": "node_modules/react-dom/dist/react-dom",
"moment": "node_modules/moment/min/moment.min",
"react-onclickoutside": "node_modules/react-onclickoutside/index",
"react-datepicker": "node_modules/react-datepicker/dist/react-datepicker",
"main": "scripts/main",
},
"shim": {
"datatable": {
"deps": ['jquery']
},
"dtbootstrap": {
"deps": ['datatable']
},
},
jsx: {
fileExtension: ".js",
}
});
Upvotes: 0