2017-10-18 2 views
0

Je joue actuellement avec ReactJS en utilisant TypeScript comme langage sous-jacent auquel je définis mes composants.React.createElement throws Composant non défini

J'ai vu sur beaucoup de sites, qu'il est possible de rendre de tels composants dans une page (dans mon cas cshtml). Surtout here que j'ai essayé d'accomplir. Pour ce faire il devrait y avoir quelque chose comme:

<!-- ... --> 
<body> 
    <div id="myTargetId"></div> 
</body> 
<!-- ... --> 

<script src="@(Url.Content("~/Scripts/React/dist/commons.js"))"></script> 
<script src="@(Url.Content("~/Scripts/React/dist/MyComponent.js"))"></script> 
<script> 
    ReactDOM.render(React.createElement(MyComponent, {}), document.getElementById("targetId")); 
</script> 

Actuellement je reçois l'erreur suivante:

Uncaught ReferenceError: MyComponent is not defined

C'est ce que mon MyComponent.tsx ressemble:

import * as React from "react"; 

export interface IMyComponentProps { } 
export interface IMyComponentState { } 

export class MyComponent extends React.Component<IMyComponentProps, IMyComponentState> { 
    render(): JSX.Element { 
     return (
      <p>This comes from ReactJs</p> 
     ); 
    } 
} 

Pour emballer tout cela ensemble j'utilise webpack avec le suivant webpack.config.js (simplifié):

const webpack = require("webpack"); 
module.exports = { 
    entry: { 
     MyComponent: "./Scripts/React/Modules/MyComponent.tsx" 
    }, 
    output: { 
     path: path.join(__dirname, "./Scripts/React/dist/"), 
     filename: "[name].js" 
    }, 

    externals: { 
     "react": "React", 
     "react-dom": "ReactDOM" 
    } 
}; 

Et, enfin, c'est le JavaScript émis:

webpackJsonp([0],[ 
/* 0 */ 
/***/ (function(module, exports, __webpack_require__) { 

"use strict"; 

Object.defineProperty(exports, "__esModule", { value: true }); 
const React = __webpack_require__(1); 
class MyComponent extends React.Component { 
    render() { 
     return (React.createElement("p", null, "This comes from ReactJs")); 
    } 
} 
exports.MyComponent = MyComponent; 


/***/ }), 
/* 1 */ 
/***/ (function(module, exports) { 

module.exports = React; 

/***/ }) 
],[0]); 
//# sourceMappingURL=MyComponent.js.map 

Qu'est-ce que je manque ici?

+0

Je ne suis pas sûr, mais je pense que vous devez utiliser par défaut 'l'exportation vers l'exportation classe par défaut MyComponent'. Je n'utilise ni tapuscrit ni react.net donc je ne suis pas sûr –

+0

Si j'écris 'export default ChallengerTeamDetails; 'à la fin de' tsx' il est émis dans 'exports.MyComponent = MyComponent; exports.default = MyComponent; 'mais cela ne fonctionne toujours pas – KingKerosin

+0

Postez le code où vous importez MyComponent. – stone

Répondre

0

Uncaught ReferenceError: MyComponent is not defined

Votre importation est erroné:

<script src="@(Url.Content("~/Scripts/React/dist/commons.js"))"></script> 
<script src="@(Url.Content("~/Scripts/React/dist/MyComponent.js"))"></script> 

Vous devez construire un bundle.js utilisant webpack.

Plus

Un des nombreux QuickStart sur Internet https://basarat.gitbooks.io/typescript/docs/quick/browser.html

+0

que je fais déjà. C'est la même chose que dans le lien que vous avez posté. Il est seulement nommé différent '[nom] .js' qui se résoudra en' MyComponent.js' au lieu de 'bundle.js', non? – KingKerosin