[解決済み] <リンク>はMaterialUIと一緒に使用できません。
2022-03-10 10:48:54
質問
ReactとMaterialUIでElectronアプリを作りたいのですが、どうすればいいですか?
インターフェースはきれいに見えますが、ドロワーボタンをクリックしても何も起こりません。ルーティングは実装されていますが、MenuItemの内部または周囲に挿入しようとすると、次のようなメッセージが表示されます。
警告 React.createElement: type is invalid -- string (for built-in components) or a class/function (for composite components) expected but got: undefined. コンポーネントを定義されたファイルからエクスポートするのを忘れている可能性があります。の render メソッドをチェックしてください。
MenuBar
.
以下は私のコードです。
// App.js
import './assets/css/App.css';
import React, { Component } from 'react';
import { render } from 'react-dom';
import MenuBar from './components/MenuBar';
import { BrowserRouter as Router, Route, Link} from 'react-router-dom';
import About from "./screens/About";
import SomePage from "./screens/SomePage";
class App extends Component {
render() {
return (
<Router>
<div>
<MenuBar></MenuBar>
<ul>
<li><Link to="/">Home</Link></li>
<li><Link to="/about">About</Link></li>
<li><Link to="/somepage">Topics</Link></li>
</ul>
<hr/>
<Route exact path="/"/>
<Route path="/about" component={About}/>
<Route path="/somepage" component={SomePage}/>
</div>
</Router>
);
}
}
export default App;
// MenuBar.js
// @flow weak
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { withStyles, createStyleSheet } from 'material-ui/styles';
import Drawer from 'material-ui/Drawer';
import AppBar from 'material-ui/AppBar';
import Toolbar from 'material-ui/Toolbar';
import Divider from 'material-ui/Divider';
import List, { ListItem, ListItemIcon, ListItemText } from 'material-ui/List';
import Typography from 'material-ui/Typography';
import Button from 'material-ui/Button';
import IconButton from 'material-ui/IconButton';
import MenuIcon from 'material-ui-icons/Menu';
import Menu, { MenuItem } from 'material-ui/Menu';
import MenuDots from './MenuDots';
// Routing
import { Link } from 'react-router'
// Icons
import InboxIcon from 'material-ui-icons/Inbox';
import DraftsIcon from 'material-ui-icons/Drafts';
import StarIcon from 'material-ui-icons/Star';
import SendIcon from 'material-ui-icons/Send';
import MailIcon from 'material-ui-icons/Mail';
import DeleteIcon from 'material-ui-icons/Delete';
import ReportIcon from 'material-ui-icons/Report';
const styleSheet = createStyleSheet({
root: {
width: '100%',
},
flex: {
flex: 1,
},
list: {
width: 250,
flex: 'initial',
},
listFull: {
width: 'auto',
flex: 'initial',
}
});
class MenuBar extends Component {
constructor() {
super();
this.state = {
open: false
}
}
//Toggle function (open/close Drawer)
toggleDrawer(_state) {
if (_state === true || _state === false) {
this.setState({
open: _state
})
} else {
this.setState({
open: !this.state.open
})
}
}
handleLeftOpen = () => this.toggleDrawer(true);
handleLeftClose = () => this.toggleDrawer(false);
render() {
const classes = this.props.classes;
const mailFolderListItems = (
<div>
<ListItem button>
<ListItemIcon>
<InboxIcon />
</ListItemIcon>
<Link to="/somepage"><ListItemText primary="test" /></Link>
</ListItem>
<ListItem button>
<ListItemIcon>
<StarIcon />
</ListItemIcon>
<ListItemText primary="Starred" />
</ListItem>
<ListItem button>
<ListItemIcon>
<SendIcon />
</ListItemIcon>
<ListItemText primary="Send mail" />
</ListItem>
<ListItem button>
<ListItemIcon>
<DraftsIcon />
</ListItemIcon>
<ListItemText primary="Drafts" />
</ListItem>
</div>
);
const otherMailFolderListItems = (
<div>
<ListItem button>
<ListItemIcon>
<MailIcon />
</ListItemIcon>
<ListItemText primary="All mail" />
</ListItem>
<ListItem button>
<ListItemIcon>
<DeleteIcon />
</ListItemIcon>
<ListItemText primary="Trash" />
</ListItem>
<ListItem button>
<ListItemIcon>
<ReportIcon />
</ListItemIcon>
<ListItemText primary="Spam" />
</ListItem>
</div>
);
const sideList = (
<div>
<List className={classes.list} disablePadding>
{mailFolderListItems}
</List>
<Divider />
<List className={classes.list} disablePadding>
{otherMailFolderListItems}
</List>
</div>
);
return (
<div className={classes.root}>
<AppBar position="static">
<Toolbar style={{ paddingLeft: "8px", paddingRight: "8px" }}>
<IconButton color="contrast" aria-label="Menu" onClick={this.toggleDrawer.bind(this)}>
<MenuIcon />
</IconButton>
<Typography type="title" color="inherit" className={classes.flex}>
Some Software
</Typography>
<Button color="contrast">Login</Button>
<MenuDots></MenuDots>
</Toolbar>
</AppBar>
<Drawer
open={this.state.open}
onRequestClose={this.handleLeftClose}
onClick={this.handleLeftClose}
>
{sideList}
</Drawer>
</div>
);
}
}
MenuBar.propTypes = {
classes: PropTypes.object.isRequired,
};
export default withStyles(styleSheet)(MenuBar);
解決方法は?
reactを使用しています。
router v4
ということで、インポートする代わりに
Link
から
react-router
メニューバーコンポーネントでは、以下のファイルからインポートします。
react-router-dom
.
こんな感じで。
import { Link } from 'react-router-dom';
を確認します。 DOC .
関連
-
[解決済み】Javascript:getElementById対getElementsById(両方が別のページで動作する)。
-
[解決済み] jQueryでチェックボックスに "checked "を設定する
-
[解決済み] JavaScriptで現在のURLを取得する?
-
[解決済み] JavaScriptで要素のクラスを変更するにはどうすればよいですか?
-
[解決済み] jQueryでページを更新するにはどうすればよいですか?
-
[解決済み] jQueryで要素にスクロールする
-
[解決済み] jQueryで入力を無効化/有効化する?
-
[解決済み] JavaScriptで2つの日付を比較する
-
[解決済み] ngModel' は 'input' の既知のプロパティではないため、バインドできません。
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】パッシブイベントリスナー内部でpreventDefaultができない
-
[解決済み】node.js TypeError: path must be absolute or specify root to res.sendFile [JSONのパースに失敗しました]。
-
[解決済み】Javascript:getElementById対getElementsById(両方が別のページで動作する)。
-
[解決済み】JavaScriptで':'(コロン)は何をするのか?
-
[解決済み】最大呼び出しスタックサイズ超過エラーとその修正方法とは?
-
[解決済み】JavaScript "Uncaught TypeError: object is not a function" 連想性の質問
-
[解決済み] テスト
-
[解決済み】エラー:リスン EACCES 0.0.0.0:80 OSx Node.js
-
[解決済み】npm install --legacy-peer-deps は具体的に何をするのですか?どんなときに推奨されるのか/どんな使用例が考えられるのか?
-
[解決済み】 Uncaught Error: Invariant Violation: 解決済み】 Uncaught Error: Invariant Violation: Element type is invalid: expected a string (for built-in components) or a class/function but got: object.