javascript - 使用 Router 的组件未显示在 Button 单击事件上
问题描述
我正在实现用户可以在两个选项之间进行选择的页面:按钮 1 重定向到TestOption.js
或按钮 2 重定向到 TestOption2(目前,TestOption
用于测试目的)。默认页面是SelectionPage
.
问题在于按钮单击事件。在SelectionPage
,我正在使用onClick={this.props.clickBtn}
. 当我单击该按钮时,它会打开一个新页面,其中Header
只有,但没有Main
. 我认为问题是由Router
我在Main
. 但我不知道如何解决它。
有人可以指出我的错误吗?
谢谢。
App.js 的代码:
import React, { Component } from 'react';
import './App.css';
import TestOption from './components/TestOption';
import SelectionPage from './components/SelectionPage';
class App extends Component {
state = {
renderView: 0
};
clickBtn = e => {
console.log(e.target.value);
this.setState({
renderView: +e.target.parentNode.value
});
};
render() {
switch (this.state.renderView) {
case 1:
return (
< TestOption />
);
case 2:
return (
< TestOption />
);
default:
return (
< SelectionPage clickBtn={this.clickBtn} />
);
}
}
}
export default App;
SelectionPage.js 的代码:
import React, {Component} from 'react';
import Button from '@material-ui/core/Button';
import Grid from "@material-ui/core/Grid";
import CssBaseline from "@material-ui/core/CssBaseline";
import Card from "@material-ui/core/Card";
import CardContent from "@material-ui/core/CardContent";
import Typography from "@material-ui/core/Typography";
import withStyles from "@material-ui/core/styles/withStyles";
const styles = theme => ({
card: {
minWidth: 350
},
button: {
fontSize: "12px",
margin: theme.spacing.unit,
minWidth: 350
},
extendedIcon: {
marginRight: theme.spacing.unit
},
title: {
fontSize: '20px',
minWidth: 350,
margin: theme.spacing.unit
},
});
class SelectionPage extends Component {
render() {
const { classes } = this.props;
return (
<React.Fragment>
<CssBaseline />
<Grid
container
spacing={0}
direction="column"
alignItems="center"
justify="center"
style={{ minHeight: "100vh" }}
>
<Card className={classes.card}>
<Typography align="center" className={classes.title}>
Select the option
</Typography>
<CardContent>
<Grid item xs={3}>
<Button
variant="contained"
size="medium"
color="primary"
className={classes.button}
value="1"
onClick={this.props.clickBtn}
>
Option 1
</Button>
</Grid>
<Grid item xs={3}>
<Button
variant="contained"
size="medium"
color="primary"
className={classes.button}
value="2"
onClick={this.props.clickBtn}
>
Option 2
</Button>
</Grid>
</CardContent>
</Card>
</Grid>
</React.Fragment>
);
}
}
export default withStyles(styles)(SelectionPage);
TestOption的代码:
import React, { Component } from 'react';
import './../App.css';
import { Header } from './Header';
import { Main } from './Main';
class TestOption extends Component {
render() {
return (
<div className="App">
<div className="Site-content">
<div className="App-header">
<Header />
</div>
<div className="main">
<Main />
</div>
</div>
</div>
);
}
}
export default TestOption;
Main.js 的代码:
import '../App.css';
import React from 'react'
import { BrowserRouter as Router, Route } from 'react-router-dom'
import { Tree } from './Tree';
import { Tabular } from './Tabular';
export function Main() {
return (
<div>
<Router>
<Route path='/.' component={Tree} />
<Route path='/tabular' component={Tabular} />
</Router>
</div>
)
}
解决方案
<Route path='/tabular' component={Tabular} />
<Route path='/' component={Tree} />
更改顺序<Route>
将解决您的问题。
推荐阅读
- python - Django 表单集和文件
- arrays - 在一个写时钟周期内读取多个块 RAM 索引
- javascript - 当自更新道具发生变化时如何进行反应组件更新?
- avro - 我可以限制 avro-tools 读取的行数吗?
- php - 未通过中间件时来自节流请求的 TypeError
- php - 从数据库结果 PHP 构建 JSON
- swift - 在 Swift 中创建一个以可变整数作为输入的平方数数组
- android - Google In App Purchase 检索已消费的购买
- node.js - 如何取消对未授权资源的订阅
- elasticsearch - 在弹性搜索中使用 Jest 客户端更新部分文档