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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Material-UI

Material-UIは、Material Designを利用可能なオープンソースのReact向けUIコンポーネントキットです。

JavaScript

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

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

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

Q&A

解決済

1回答

380閲覧

React + TypeScriptでのコンポーネントのエラー

退会済みユーザー

退会済みユーザー

総合スコア0

Material-UI

Material-UIは、Material Designを利用可能なオープンソースのReact向けUIコンポーネントキットです。

JavaScript

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

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

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

0グッド

0クリップ

投稿2020/01/19 16:04

React + TypeScriptでのコンポーネントのエラー

概要

現在、TypeScript + Reactで開発中ですが、下記の様なエラーが発生いたしました。
エラーの意味と該当箇所は恐らく分かっています。
具体的には、<Icon />でundefinedをコンポーネントとして描画しようとしている為なのかなと…。
しかし、それを解決する方法が分かりません。
どなたか解決方法のご教授お願いいたします。

エラー内容

index.js:1 Warning: React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports

該当のソースコード

TypeScript

1import React from 'react' 2import styled from 'styled-components' 3 4import { useSelector, useDispatch } from "react-redux" 5 6import * as actionTypes from "../utils/actionTypes" 7 8import { makeStyles } from '@material-ui/core/styles' 9import Snackbar from '@material-ui/core/Snackbar' 10import SnackbarContent from '@material-ui/core/SnackbarContent' 11import IconButton from '@material-ui/core/IconButton' 12import CloseIcon from '@material-ui/icons/Close' 13import CheckCircleIcon from '@material-ui/icons/CheckCircle' 14import WarningIcon from '@material-ui/icons/Warning' 15import ErrorIcon from '@material-ui/icons/Error' 16import InfoIcon from '@material-ui/icons/Info' 17 18interface iVariantIcon { 19 [key: string]: any, // シグネチャー 20} 21 22interface iClasses { 23 [key: string]: string, 24} 25 26const variantIcon: iVariantIcon = { 27 success: CheckCircleIcon, 28 warning: WarningIcon, 29 error: ErrorIcon, 30 info: InfoIcon, 31} 32 33const Notification: React.FC = () => { 34 const classes: iClasses = useStyles() 35 36 const dispatch = useDispatch() 37 const closeNotification = () => dispatch({ type: actionTypes.CLOSE_NOTIFICATION }) 38 39 const notificationOpen = useSelector((state: any) => state.NotificationReducer.notificationOpen) 40 const variant = useSelector((state: any) => state.NotificationReducer.variant) 41 const message = useSelector((state: any) => state.NotificationReducer.message) 42 43 const Icon = variantIcon[variant] 44 45 return ( 46 <Snackbar 47 anchorOrigin={{ 48 vertical: 'top', 49 horizontal: 'center', 50 }} 51 open={notificationOpen} 52 autoHideDuration={2000} 53 onClose={closeNotification} 54 > 55 <SnackbarContent 56 className={classes[variant]} 57 aria-describedby="client-snackbar" 58 message={ 59 <Span> 60 <Icon className={classes.icon} /> 61 {message} 62 </Span> 63 } 64 action={[ 65 <IconButton 66 key="close" 67 aria-label="Close" 68 color="inherit" 69 onClick={closeNotification} 70 > 71 <StyledCloseIcon /> 72 </IconButton> 73 ]} 74 /> 75 </Snackbar> 76 ) 77} 78 79const useStyles = makeStyles(() => ({ 80 success: { 81 backgroundColor: '#0074bf', 82 }, 83 error: { 84 backgroundColor: '#c93a40', 85 }, 86 info: { 87 backgroundColor: '#0074bf', 88 }, 89 warning: { 90 backgroundColor: '#c93a40', 91 }, 92 icon: { 93 fontSize: 20, 94 opacity: 0.9, 95 marginRight: 10 96 } 97})) 98 99const Span = styled.span` 100 display: 'flex', 101 alignItems: 'center', 102` 103 104const StyledCloseIcon = styled(CloseIcon)` 105 font-size: 20; 106` 107 108export default Notification

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

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

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

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

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

guest

回答1

0

ベストアンサー

reducerのvariantに初期値としてsuccessを格納したところ解決いたしました。
ありがとうございました!

投稿2020/01/21 16:35

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問