[英]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.