我使用Material-UI来创建DateTime选择器。 Here是我的演示代码。
我在功能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
});
};
答案 0 :(得分:1)
我将状态值作为默认值添加到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.
});
};
我希望这可以解决您的问题:)
答案 1 :(得分:0)
您要重写传递给该方法内部方法name
的{{1}}参数,以进行handleChange
,因此,当您在末尾重新设置状态时:
const name = target.name;
您没有设置预期的this.setState({
[name]: event.target.value
})
。
您可以通过两种方式对其进行修复:
1)直接通过以下方式设置状态:
plannedDep
2)在您的this.setState({
plannedDep: event.target.value
})
中添加一个name属性,以使TextField
将成为触发事件的TextField的name属性的值:
target.name
答案 2 :(得分:0)
我认为问题是您的onChange
处理程序。如果要将值传递给onChange
,则必须在回调中对其进行初始化。
尝试将您的onChange
更改为onChange={() => this.handleChange("plannedDep")}