[英]How to get a value from DateTime picker in React?
我使用Material-UI来创建DateTime选择器。 这是我的演示代码。
我将console.log
添加到功能handleChange
中,以查看当前选定的值。 但是,当我使用DatTime选择器时,该值不会更改:
handleChange = name => event => {
const target = event.target;
const name = target.name;
console.log("plannedDep", this.state.plannedDep)
this.setState({
[name]: event.target.value
});
};
我将状态值作为默认值添加到plannedDep。 value={this.state.plannedDep}
我以这种方式更改了onChange: onChange={(event) => this.handleChange("plannedDep", event)}
。 按照您的代码, onChange={this.handleChange("plannedDep")}
您已安装的onchange将在组件安装后立即触发,并且每次状态/属性更改都会导致不必要的渲染。
<TextField
id="datetime-local"
label="Next appointment"
type="datetime-local"
onChange={(event) => this.handleChange("plannedDep", event)}
value={this.state.plannedDep}
className={classes.textField}
InputLabelProps={{
shrink: true,
}}
/>
handleChange = (name, event) => {
const target = event.target; // Do we need this?(unused in the function scope)!
this.setState({
[name]: event.target.value
}, () => {
console.log(this.state.plannedDep)
// Prints the new value.
});
};
我希望这可以解决您的问题:)
您可以通过const name = target.name;
覆盖传递给该方法内部方法handleChange
的name
参数const name = target.name;
,因此当您在最后设置状态时:
this.setState({
[name]: event.target.value
})
您没有设置预期的plannedDep
。
您可以通过两种方式修复它:
1)通过以下方式直接设置状态:
this.setState({
plannedDep: event.target.value
})
2)向您的TextField
添加名称属性,以便target.name
将成为触发事件的TextField的名称属性的值:
<TextField
id="datetime-local"
name="plannedDep" // see here!
label="Next appointment"
type="datetime-local"
onChange={this.handleChange("plannedDep")}
defaultValue="2017-05-24T10:30"
className={classes.textField}
InputLabelProps={{
shrink: true
}}
/>
这是工作演示
我相信问题是您的onChange
处理程序。 如果要将值传递给onChange
,则必须在回调中对其进行初始化。 尝试将onChange
更改为onChange={() => this.handleChange("plannedDep")}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.