con*_*tor 2 javascript slider reactjs material-ui
我希望在一个 React 组件中共享一个公共事件处理程序的多个 material-ui 滑块。但是,要完成这项工作,我需要确定原始滑块。从API 文档中我看不出这是如何实现的。我已经尝试对-component应用id和name属性<Slider>,但我没有在事件处理程序的合成事件中看到这些。
handleChange = (event, value) => {
console.log(event); // 'Id' and 'name' attributes in 'target' are empty
this.setState({ value });
};
render() {
const { classes } = this.props;
const { value } = this.state;
return (
<div className={classes.root}>
<Typography id="label">Slider label</Typography>
<Slider
classes={{ container: classes.slider }}
value={value}
aria-labelledby="label"
onChange={this.handleChange}
/>
</div>
);
}
Run Code Online (Sandbox Code Playgroud)
这是从官方演示项目中获取的:
https://codesandbox.io/s/4j9l9xn1o4
任何帮助将不胜感激!
你可以像这样格式化你的状态:
state = {
slider1: 50, //slider1 is the name of the first slider
slider2: 50, //slider2 is the name of the second slider
}
Run Code Online (Sandbox Code Playgroud)
之后,您有两种方法可以设置滑块值更改时的状态:
(更新:此方法不起作用!但是我将其留在这里以供将来参考)通过使用 HTML 属性id,然后使用event.target.id. 整个handleChange方法如下所示:
handleChange = (e, value) => {
this.setState({
[e.target.id]: value
});
}
Run Code Online (Sandbox Code Playgroud)通过将滑块的名称直接传递给handleChange方法,它会是这样的:
handleChange = name => (e, value) => {
this.setState({
[name]: value
});
}
Run Code Online (Sandbox Code Playgroud)总的来说,你的组件应该是:
class SimpleSlider extends Component {
state = {
slider1: 50,
slider2: 50
};
handleChange = name => (e, value) => {
this.setState({
[name]: value // --> Important bit here: This is how you set the value of sliders
});
};
render() {
const { classes } = this.props;
const { slider1, slider2 } = this.state;
return (
<div className={classes.root}>
<Typography id="label">Slider label</Typography>
<Slider
classes={{ container: classes.slider }}
value={slider1}
aria-labelledby="label"
onChange={this.handleChange("slider1")}
/>
<Slider
classes={{ container: classes.slider }}
value={slider2}
aria-labelledby="label"
onChange={this.handleChange("slider2")}
/>
</div>
);
}
}
Run Code Online (Sandbox Code Playgroud)
看看它在行动:https : //codesandbox.io/s/4qz8o01qp4
编辑:运行代码后,我发现 #1 不起作用,因为 id 属性没有传递给事件目标