私はreactルーター拡張機能を使用してアプリケーションでreactルートを定義しています。すべてが正常に機能していますが、問題は、es6構文を使用してクラスApp.js
をindex.js
よりも「関数としてクラスを呼び出すことができない」と定義した場合です。 App.js
ファイル形式をApp.jsx
に変更すると、問題が解決します。 index.jsx
ファイルを.js
es6
形式で定義するにはどうすればよいですか?またはこの問題を解決する適切な方法はありますか?これらは私のreactルーターファイルとapp.jsファイルです。これがreact-routerライブラリのgithubリンクです https://github.com/reactjs/react-router
index.jsx
import React from 'react'
import { render } from 'react-dom'
import { Router, Route, browserHistory } from 'react-router'
import App from './app/App'
render((
<Router history={browserHistory}>
<Route path="/" component={App}/>
</Router>
), document.getElementById('app'))
これで、reactルーターファイルは//App.jsファイルになります
import React from 'react';
import { Link } from 'react-router'
class App extends React.createClass{
constructor(props) {
super(props);
}
render() {
return (
<div>
This is a App.js file write in es6.
</div>
)
}
}
export default App;
**編集済み:**次のwebpackローダー設定があります
{
test: /(\.js|\.jsx)$/,
exclude: /node_modules/,
loader: 'babel',
query: {
presets:['es2015','react']
}
}
クラスはReact.Component
ではなくReact.createClass
を拡張する必要があります。
例えば.
class App extends React.Component {
render() {
return <div>Hello, world</div>;
}
}
ライブラリ全体ではなく、コンポーネントに必要なものだけをインポートします。以下の例
import React, {Component} from 'react';
class App extends Component {
render() {
return <div>Hello, world</div>;
}
}
また、envはすべての最新のESバージョンをサポートしているため、es2015の代わりにenvの使用を開始します。これはbabelが推奨しています。 babel-preset-envをインストールし、babel-preset-es2015をアンインストールします
npm install -d babel-preset-env
{
test: /(\.js|\.jsx)$/,
exclude: /node_modules/,
loader: 'babel',
query: {
presets:['env','react']
}
}
Webpack構成ファイルで、jsxファイルをtest
するbabelローダーを検索します。 jsx
をjs
に変更します