これまでのところ、webpack.config.jsファイルをjsxファイルを処理するように設定する方法を見つけました。React + Webpack - 単純なHello Worldコンポーネントの不変の違反エラー
var HtmlWebpackPlugin = require('html-webpack-plugin');
var HtmlWebpackPluginConfig = new HtmlWebpackPlugin({
template: __dirname + '/app/index.html',
filename: 'index.html',
inject: 'body'
})
module.exports = {
entry: [
'./app/index.jsx'
],
output: {
path: __dirname + '/dist',
filename: "index_bundle.jsx"
},
module: {
loaders: [
{test: /\.jsx$/, exclude: /node_modules/, loader: "babel-loader", query: {presets: ['react', 'es2015']}}
]
},
resolve: {
extensions: ['','.js', '.jsx']
},
plugins: [HtmlWebpackPluginConfig]
}
そして、私は何をしようとしているのは非常に簡単に反応し、ブートストラップボタンでコンポーネントを反応させるレンダリングである:ここにある
HelloWorld.jsx
import React from 'react';
import { Button } from 'react-bootstrap';
export default React.createClass({
getInitialState: function() {
return {
spanish: false
}
},
handleClick: function() {
this.setState({spanish: true});
},
render: function() {
const text = this.state.spanish ? 'Hola Mundo!' : 'Hello World';
const buttonText = this.state.spanish ? 'Click Para Cambiar a Inglés' : 'Click to Swith To Spanish';
return (
<div>
<h1>{text}</h1>
<Button onClick={this.handleClick}>{buttonText}</Button>
</div>
)
}
})
そして、ここにあります
index.jsx
import React from 'react';
import ReactDOM from 'react-dom';
import { HelloWorld } from './components/HelloWorld';
ReactDOM.render(
<HelloWorld />,
document.getElementById('app')
);
:アプリケーションのエントリポイントここ
がpackage.jsonです:
{
"name": "soundcloud-player",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"production": "webpack -p",
"start": "webpack-dev-server"
},
"author": "",
"license": "ISC",
"dependencies": {
"axios": "^0.15.1",
"babel-cli": "^6.16.0",
"babel-core": "^6.17.0",
"babel-preset-es2015": "^6.16.0",
"babel-preset-react": "^6.16.0",
"ejs": "^2.5.2",
"express": "^4.14.0",
"react": "^15.3.2",
"react-bootstrap": "^0.30.5",
"react-dom": "^15.3.2",
"react-redux": "^4.4.5",
"react-router": "^2.8.1",
"redux": "^3.6.0"
},
"devDependencies": {
"babel-loader": "^6.2.5",
"html-webpack-plugin": "^2.22.0",
"http-server": "^0.9.0",
"webpack": "^1.13.2",
"webpack-dev-server": "^1.16.2"
}
}
今、私はここで起こって二つの問題があり、それが起こって、なぜ私は見当がつかない:
私はローカルホストに行くとき:8080、私を得ます不変違反エラーおよび警告:
index_bundle.jsx:1300警告:React.createElement:typeは、null、未定義、ブール値、または数値であってはなりません。これは文字列(DOM要素の場合)またはReactClass(複合コンポーネントの場合)でなければなりません。
キャッチインバリアント違反:要素タイプが無効です:文字列(組み込みコンポーネント用)またはクラス/関数(コンポジットコンポーネント用)が必要ですが、未定義です。私は私のwebpack.config.jsの「決意」部分を削除すると
、突然プロジェクトのすべては、私の./components/HelloWorldコンポーネントを見つけることができず、エラーの多くをスロー
最初の問題については、コンポーネントのインポート時に{}を使用しようとしましたが、役に立たなかった。 2番目の問題は私の謎です。なぜなら、私はローダーの 'テスト'の部分で指定したので、すべてのjsxファイルをフェッチするべきだと思うからです。誰かが私のプロジェクトに何が間違っているのか理解してもらえますか?ありがとうございました。
私はあなたが輸入について混乱していると思います。 'export default' =' import ClassName'(**は中括弧なし**)です。 'export class ...' = 'import {ClassName}'(**はデフォルト**でない場合は中カッコで**)。 – Aurora0001
@ Aurora0001うわー...私はとてもばかげている。私はindex.jsxファイルでimport {HelloWorld}を変更しました。ありがとう!私のwebpack.config.jsの解決に関する問題#2についての考え方はありますか? –
なぜ 'resolve'セクションを削除したいのか分かりません。これを行うことで、Webpackは、デフォルトの拡張機能( '' "、" .webpack.js "、" .web.js "、" .js "]'を[ ](https://webpack.github.io/docs/configuration.html#resolve-extensions))。 'resolve'セクションを削除した場合、インポートにjsxファイルの拡張子を明示的に指定する必要があります。 – Aurora0001