我有一个带有带有状态标签的组件。默认情况下,它应该打开第一个选项卡,状态值=0。但是,当我将该组件导入另一个组件时,它应该打开分配的状态,例如状态值=1。请检查以下示例。我该如何实现?
预先感谢
/**Component One***/
import React from 'react';
import PropTypes from 'prop-types';
import { withStyles } from '@material-ui/core/styles';
import AppBar from '@material-ui/core/AppBar';
import Tabs from '@material-ui/core/Tabs';
import Tab from '@material-ui/core/Tab';
import Typography from '@material-ui/core/Typography';
function TabContainer(props) {
return (
<Typography component="div" style={{ padding: 8 * 3 }}>
{props.children}
</Typography>
);
}
TabContainer.propTypes = {
children: PropTypes.node.isRequired,
};
const styles = theme => ({
root: {
flexGrow: 1,
backgroundColor: theme.palette.background.paper,
},
});
class SimpleTabs extends React.Component {
state = {
value: 0,
};
handleChange = (event, value) => {
this.setState({ value });
};
render() {
const { classes } = this.props;
const { value } = this.state;
return (
<div className={classes.root}>
<AppBar position="static">
<Tabs value={value} onChange={this.handleChange}>
<Tab label="Item One" />
<Tab label="Item Two" />
<Tab label="Item Three" />
</Tabs>
</AppBar>
{value === 0 && <TabContainer>Item One</TabContainer>}
{value === 1 && <TabContainer>Item Two</TabContainer>}
{value === 2 && <TabContainer>Item Three</TabContainer>}
</div>
);
}
}
SimpleTabs.propTypes = {
classes: PropTypes.object.isRequired,
};
export default withStyles(styles)(SimpleTabs);
/**Component Two**/
import React from 'react';
import SimpleTabs from './SimpleTabs'
class ComponentTwo extends Component {
render () {
return (
<SimpleTabs value={1}/>
)
}
}
export default ComponentTwo
答案 0 :(得分:0)
您可以在道具中传递制表符值
state = {
value: props.tabValue,
};
<SimpleTabs value={tabvalue}/>
答案 1 :(得分:0)
您正在传递道具,因此您应该检查道具值,然后在组件内部使用状态值。 所以渲染功能应该是
import React from "react";
import PropTypes from "prop-types";
import { withStyles } from "@material-ui/core/styles";
import AppBar from "@material-ui/core/AppBar";
import Tabs from "@material-ui/core/Tabs";
import Tab from "@material-ui/core/Tab";
import Typography from "@material-ui/core/Typography";
function TabContainer(props) {
return (
<Typography component="div" style={{ padding: 8 * 3 }}>
{props.children}
</Typography>
);
}
TabContainer.propTypes = {
children: PropTypes.node.isRequired
};
const styles = theme => ({
root: {
flexGrow: 1,
backgroundColor: theme.palette.background.paper
}
});
class SimpleTabs extends React.Component {
state = {
Tabvalue: 1
};
componentDidMount() {
if (this.props.open) {
this.setState({ Tabvalue: this.props.open });
}
}
handleChange = (event, value) => {
this.setState({ Tabvalue: value });
};
render() {
const { classes } = this.props;
const { Tabvalue } = this.state;
let value = Tabvalue;
return (
<div className={classes.root}>
<AppBar position="static">
<Tabs value={value} onChange={this.handleChange}>
<Tab label="Item One" />
<Tab label="Item Two" />
<Tab label="Item Three" />
</Tabs>
</AppBar>
{value === 0 && <TabContainer>Item One</TabContainer>}
{value === 1 && <TabContainer>Item Two</TabContainer>}
{value === 2 && <TabContainer>Item Three</TabContainer>}
</div>
);
}
}
SimpleTabs.propTypes = {
classes: PropTypes.object.isRequired
};
export default withStyles(styles)(SimpleTabs);
/**Component Two**/
import React from 'react';
import SimpleTabs from './SimpleTabs'
class ComponentTwo extends React.Component {
render() {
return <SimpleTabs open={2} />;
}
}
export default ComponentTwo
在此,将打开值作为prop传递,如果不存在props值,则将打开默认的1选项卡。不要使用0作为状态,因为类型检查将其设置为假值。