【发布时间】:2019-09-11 11:51:04
【问题描述】:
我目前正在使用 React 构建一个带有导航栏的网站,我使用 Material-UI。
我的问题是,例如,当我在导航栏中单击“关于”时,我想在 About 中显示内容/组件,而当我单击 Home 时,我希望显示组件 Home 而隐藏其他组件。
问题是我仍然是 React 的初学者,想练习我的 React 技能,现在我有导航栏、主页、关于在单独的文件中,不知道在这种情况下如何通过状态、道具等。
我将在网站上显示一个屏幕截图,并使用 code-sn-ps 来显示我目前的代码。
我的程序的文件结构:
这是代码:
App.js:
import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
import NavBar from './Components/Navigationbar'
import Home from './Components/Home'
import About from './Components/About'
class App extends Component {
constructor(props){
super(props);
this.state = {showAbout: true};
this.handleAbout = this.handleAbout.bind(this);
}
handleAbout(){
this.setState({showAbout: true})
}
render() {
return (
<div className="App">
<div className="App-header">
</div>
<NavBar></NavBar>
<p className="App-intro">
<Home></Home>
</p>
{this.state.showAbout ? <About /> : null}
</div>
);
}
}
export default App;
Home.jsx:
import React from 'react';
import { makeStyles } from '@material-ui/core/styles';
import Paper from '@material-ui/core/Paper';
import Typography from '@material-ui/core/Typography';
const useStyles = makeStyles(theme => ({
root: {
padding: theme.spacing(3, 2),
backgroundColor: 'mistyrose'
},
}));
export default function PaperSheet() {
const classes = useStyles();
return (
<div>
<Paper className={classes.root}>
<Typography variant="h5" component="h3">
Home
</Typography>
<Typography component="p">
Welcome Home
</Typography>
</Paper>
</div>
);
}
关于.jsx:
import React from 'react';
import { makeStyles } from '@material-ui/core/styles';
import Paper from '@material-ui/core/Paper';
import Typography from '@material-ui/core/Typography';
const useStyles = makeStyles(theme => ({
root: {
padding: theme.spacing(3, 2),
backgroundColor: 'mistyrose'
},
}));
export default function PaperSheet() {
const classes = useStyles();
return (
<div>
<Paper className={classes.root}>
<Typography variant="h5" component="h3">
About
</Typography>
<Typography component="p">
About
</Typography>
</Paper>
</div>
);
}
最后是来自 Material UI 的导航栏: Navigationbar.jsx:
import React from 'react';
import ReactDOM from 'react-dom';
import Button from '@material-ui/core/Button';
import App from '../App';
import { makeStyles } from '@material-ui/core/styles';
import Paper from '@material-ui/core/Paper';
import Tabs from '@material-ui/core/Tabs';
import Tab from '@material-ui/core/Tab';
import About from './About';
const useStyles = makeStyles({
root: {
flexGrow: 1,
},
});
function handleAbout(props){
alert('About');
}
const navBar = (props) => {
return (
<Paper >
<Tabs
//value={value}
onChange={handleChange}
indicatorColor="primary"
textColor="primary"
centered
>
<Tab label="Home" />
<Tab label="About" onClick={() => handleAbout(props)} />
<Tab label="Contact" />
</Tabs>
</Paper>
);
}
//ReactDOM.render(<navBar />, document.querySelector('#app'));
export default navBar;
我的问题是当我点击导航栏中的“关于”时,我想在我的网站上显示关于组件(About.jsx 中的内容),但不确定如何处理这种情况下的状态和道具当它们在单独的文件中时。
如果有人可以帮助我,将不胜感激。 非常感谢。
【问题讨论】:
标签: reactjs material-ui