質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Babel

Babelは、JavaScriptの次世代仕様であるECMAScriptのコンパイラ。次世代の標準機能を用いて記述されたコードを、それらの機能に対応していないブラウザでも動作するコードに変換することができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

6152閲覧

React + MaterialUI + Babelでコンポーネント作成時にエラーが発生

nyanpadpro

総合スコア9

Babel

Babelは、JavaScriptの次世代仕様であるECMAScriptのコンパイラ。次世代の標準機能を用いて記述されたコードを、それらの機能に対応していないブラウザでも動作するコードに変換することができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2018/07/27 06:59

前提・実現したいこと

ReactとMaterialUIの勉強を進めています。
押下すると数値をカウントアップするボタンが作りたいのですが、npm run devでビルドを行った後、Firefoxで動作を確認するとコンソールにエラーが表示され、ボタンが表示されない状態です。

JavaScript自体が初心者のため、どのようにエラー原因を特定していけばよいのか分かりません。
エラー原因の特定方法をご教示頂けないでしょうか。

発生している問題・エラーメッセージ

該当のページを表示するとFirefoxのコンソールに下記のエラーが表示されます。

The above error occurred in the <Mybutton> component: in Mybutton Consider adding an error boundary to your tree to customize error handling behavior. Visit https://fb.me/react-error-boundaries to learn more about error boundaries. react-dom.development.js:14226:5 [メッセージの詳細を表示または隠します。] TypeError: classes is undefined[詳細] main.js line 1778 > eval:52:19

該当のソースコード

JavaScript

1// ★index.js 2import App from "./components/App";

JavaScript

1// ★App.js 2import React from "react"; 3import ReactDOM from "react-dom"; 4 5// ボタン追加 6import Mybutton from "./Mybutton"; 7 8const form = document.getElementById("form"); 9form ? ReactDOM.render(<Mybutton />, form) : null;

JavaScript

1// ★Mybutton.js 2import React from 'react'; 3import Button from '@material-ui/core/Button'; 4 5export default class Mybutton extends React.Component { 6 7 constructor(props) { 8 super(props); 9 this.state = { count: 0 }; 10 }; 11 12 handleClick() { 13 const c = this.state.count + 1; 14 this.setState({ 15 count: c, 16 }); 17 }; 18 19 render() { 20 const { classes } = this.props; 21 return ( 22 <div className={classes.root}> 23 <b>{this.state.count}</b> 24 <Button color="primary" onClick={this.handleClick}> 25 ADD! 26 </Button> 27 </div> 28 ); 29 }; 30}

試したこと

googleで検索してみましたがよく分かりませんでした。

補足情報(FW/ツールのバージョンなど)

Firefox 61.0.1

package.jsonのDependencies
"devDependencies": {
"babel-core": "^6.26.3",
"babel-loader": "^7.1.5",
"babel-plugin-transform-class-properties": "^6.24.1",
"babel-preset-env": "^1.7.0",
"babel-preset-react": "^6.24.1",
"prop-types": "^15.6.2",
"react": "^16.4.1",
"react-dom": "^16.4.1",
"weak-key": "^1.0.0",
"webpack": "^4.16.0",
"webpack-cli": "^3.0.8",
"@material-ui/core": "^1.4.0"
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

TypeError: classes is undefined

エラー読んでください。

MyButton コンポーネントで

const { classes } = this.props;

としていますが、 App.js で

form ? ReactDOM.render(<Mybutton />, form) : null;

上のように classes を与えていないためです。

回避策

defaultProps

export default class MyButton extends React.Component { static defaultProps = { classes: {}, }; ... } // or MyButton.defaultProps = { classes: {}, }

投稿2018/07/27 07:39

編集2018/07/27 07:54
og24715

総合スコア832

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nyanpadpro

2018/07/27 11:55 編集

ご指摘の点を追加したところエラーなくボタンが表示されました。 ご回答頂き有難うございました。大変勉強になりました。 なお、質問には関連しませんが、元のコードでは上記のご指摘を対応したとしても、 ボタンを押下時にカウントアップの動作が起こりませんでしたが Mybutton.jsのconstructorを下記コードに変更することで正常に動作するようになりました。 constructor(props) { super(props); this.state = { count: 0 }; this.handleClick = this.handleClick.bind(this); //追加 };
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問