gpt4 book ai didi

javascript - 如何编辑material-ui-time-picker的时间选择器?

转载 作者:行者123 更新时间:2023-11-29 16:31:34 25 4
gpt4 key购买 nike

我有一个material-ui-time-picker,我想控制这个输入,它运行良好,但我想从键盘编辑时间输入,而不是当我点击输入时在时钟上。

我的代码是:

import React, { Component } from "react";
import { TimePicker } from "material-ui-time-picker";
import { Input as Time, Dialog as Clock } from "@material-ui/core";

openDialog = () => this.setState({ isOpen: true });
closeDialog = () => this.setState({ isOpen: false });
handleDialogTimeChange = newValue => {
const hours = newValue
.getHours()
.toString()
.padStart(2, "0");
const minutes = newValue
.getMinutes()
.toString()
.padStart(2, "0");
const textValue = hours + ":" + minutes;
this.setState({ time: textValue });
};
handleKeyboardTimeChange = time => this.setState({ time });
createDateFromTextValue = value => {
const splitParts = value.split(":");
return new Date(1970, 1, 1, splitParts[0], splitParts[1]);
};
render() {

return (

<div>
<Time
value={this.state.time}
onChange={this.handleKeyboardTimeChange}
endAdornment={
<InputAdornment position="end">
<IconButton onClick={this.openDialog}>
<AccessTime />
</IconButton>
</InputAdornment>
}
//}
/>
<Clock maxWidth="xs" open={this.state.isOpen}>
<TimePicker
mode="24h"
value={this.createDateFromTextValue(this.state.time)}
onChange={this.handleDialogTimeChange}
autoOk={true}
cancelLabel=""
okLabel=""
placeholder=""
disableUnderline={true}
/>
</Clock>
</div>
);
}

我的沙箱:https://codesandbox.io/s/vm9wm19p27

当我运行它时,我得到了这个输入,但是当我编辑他的值时,这个输入会消失。

我该如何解决?

最佳答案

他们的 Github repository 中提供了一个解决方案组件.请检查一下,这是 material-ui 的一个已知问题,并且已经被接受为解决方案。这是提供的解决方案,以防链接过时:

'use strict';
import React, {Component} from 'react';
import {DatePicker, IconButton, TextField} from "material-ui";
import ActionDateRange from 'material-ui/svg-icons/action/date-range';
import format from 'date-fns/format'
import parse from 'date-fns/parse'

export default class DatePickerField extends Component{

constructor(props){
super(props);

this.state = {
selectedDate: new Date(),
dateText: format(new Date(), 'MM/DD/YYYY')
};
}

handleChangeDatePicker = (event, date) => {
this.setState({selectedDate: date, dateText:format(date, 'MM/DD/YYYY')});
};

handleDateInputChange = (event, value) => {
this.setState({dateText:value});
};

handleDateInputBlur = (value) => {
let parsedDate = parse(value, 'MM/DD/YYYY');

if(this.isADate(parsedDate)){
this.setState({selectedDate:parsedDate});
}
else{
this.setState({dateText:format(this.state.selectedDate, 'MM/DD/YYYY')});
}
};

isADate = (maybeDate) => {
if ( Object.prototype.toString.call(maybeDate) === "[object Date]" ) {
if ( isNaN( maybeDate.getTime() ) ) {
return false;
}
else {
return true;
}
}
else {
return false;
}
};

render(){

let dateInputWidth = "150px";
let datePickerMargin = "-185px";

return (
<div style={{display: "flex"}}>
<TextField
style={{width:dateInputWidth}}
value={this.state.dateText}
onChange={this.handleDateInputChange}
onBlur={(event) => this.handleDateInputBlur(event.currentTarget.value)}
/>

<IconButton style={{opacity:"0.65"}}
onClick={() => this.datePicker.focus()}>
<ActionDateRange />
</IconButton>

<div style={{width:"0px", height:"0px", marginLeft:datePickerMargin}}>
<DatePicker
id="dataPicker"
floatingLabelText={''}
value={this.state.selectedDate}
errorText={''}
disabled={false}
formatDate={date => { return format(date, 'MM/DD/YYYY') } }
autoOk
container="inline"
fullWidth
onChange={this.handleChangeDatePicker}
ref={c => {
this.datePicker = c
}}
/>
</div>
</div>
)
}

}

如果您遇到Cannot find prepareStyles of undefined 错误,请检查您是否在使用任何组件之前将主题定义为提供者,否则它将无法工作。检查此注释:

Beginning with v0.15.0, Material-UI components require a theme to be provided. The quickest way to get up and running is by using the MuiThemeProvider to inject the theme into your application context.

这是展示如何实现这一目标的示例片段:

在你的 App.js 中

 import React from 'react';
import ReactDOM from 'react-dom';
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
import MyAwesomeReactComponent from './MyAwesomeReactComponent';

const App = () => (
<MuiThemeProvider>
<MyAwesomeReactComponent />
</MuiThemeProvider>
);

ReactDOM.render(
<App />,
document.getElementById('app')
);

在您的 ./MyAwesomeReactComponent.js 中(这是您想要使用的组件):

import React from 'react';
import RaisedButton from 'material-ui/RaisedButton';

const MyAwesomeReactComponent = () => (
<RaisedButton label="Default" />
);

export default MyAwesomeReactComponent;

请引用他们的official usage guide了解更多详情。

关于javascript - 如何编辑material-ui-time-picker的时间选择器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55742648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com