标题说明了一切。从Stepper
的示例来看,似乎只有一个可以显示的文本。是否可以显示html?
如果我把html放在<StepContent />
里面,页面看起来很奇怪:
我使用了以下代码:
<Stepper activeStep={0}>
<Step key={1}>
<StepLabel>FOO</StepLabel>
<StepContent>
<div>
<FormControl component="fieldset" required>
<FormLabel component="legend">Gender</FormLabel>
<RadioGroup
aria-label="gender"
name="gender1"
value={this.state.value}>
<FormControlLabel value="female" control={<Radio/>} label="Female"/>
<FormControlLabel value="male" control={<Radio/>} label="Male"/>
<FormControlLabel value="other" control={<Radio/>} label="Other"/>
<FormControlLabel
value="disabled"
disabled
control={<Radio/>}
label="(Disabled option)"
/>
</RadioGroup>
</FormControl>
</div>
</StepContent>
</Step>
<Step key={2}>
<StepLabel> bar </StepLabel>
</Step>
</Stepper>
答案 0 :(得分:2)
您在StepContent
中添加的任何内容都会显示为Step
本身的一部分,而不会显示在下面的内容窗格中。
如果要显示更大的内容,则应跟踪state
中的当前步骤索引,并根据该索引显示内容。这将是更多的代码,但您将能够正确显示内容。顺便说一句,doc就是这样做的。
这是一个片段,展示了如何实现这一目标:
class HorizontalLinearStepper extends React.Component {
static propTypes = {
classes: PropTypes.object,
};
// Track the active step to know what content to show
state = {
activeStep: 0,
};
getNumberOfSteps() {
return 2;
}
// Get content based on which step is active
getStepContent(step) {
switch (step) {
case 0:
return (
<div>
<FormControl component="fieldset" required>
<FormLabel component="legend">Gender</FormLabel>
<RadioGroup
aria-label="gender"
name="gender1"
value={this.state.value}>
<FormControlLabel value="female" control={<Radio />} label="Female" />
<FormControlLabel value="male" control={<Radio />} label="Male" />
<FormControlLabel value="other" control={<Radio />} label="Other" />
<FormControlLabel
value="disabled"
disabled
control={<Radio />}
label="(Disabled option)"
/>
</RadioGroup>
</FormControl>
</div>
);
case 1:
return (
<div>
<Typography>Some more arbitrary content.</Typography>
<Button>And a big button for good measure</Button>
</div>
);
default:
return 'Unknown step';
}
}
// Update the active state according to the next button press
handleNext = () => {
const { activeStep } = this.state;
this.setState({
activeStep: activeStep + 1
});
};
// Similar for back and reset buttons
handleBack = () => {
const { activeStep } = this.state;
this.setState({
activeStep: activeStep - 1,
});
};
handleReset = () => {
this.setState({
activeStep: 0,
});
};
render() {
const { classes } = this.props;
const { activeStep } = this.state;
// Notice that the content below isn't in the Stepper, it's in its own pane underneath
return (
<div className={classes.root}>
<Stepper activeStep={activeStep}>
<Step key={0}>
<StepLabel>FOO</StepLabel>
</Step>
<Step key={1}>
<StepLabel> bar </StepLabel>
</Step>
</Stepper>
<div>
{activeStep === this.getNumberOfSteps() ? (
<div>
<Typography className={classes.instructions}>
All steps completed - you"re finished
</Typography>
<Button onClick={this.handleReset} className={classes.button}>
Reset
</Button>
</div>
) : (
<div>
{
// Populate the content pane based on the active step
this.getStepContent(activeStep)
}
<div>
<Button
disabled={activeStep === 0}
onClick={this.handleBack}
className={classes.button}
>
Back
</Button>
<Button
variant="raised"
color="primary"
onClick={this.handleNext}
className={classes.button}
>
{activeStep === this.getNumberOfSteps() - 1 ? 'Finish' : 'Next'}
</Button>
</div>
</div>
)}
</div>
</div>
);
}
}
您可以看到完整的工作示例here。