Convert to functional component

This commit is contained in:
Franck Royer 2021-04-22 17:01:46 +10:00
parent c7ba19f43e
commit 5aee9f4841
No known key found for this signature in database
GPG Key ID: A82ED75A8DFC50A4

View File

@ -1,4 +1,4 @@
import React, { ChangeEvent, KeyboardEvent } from 'react'; import React, { ChangeEvent, KeyboardEvent, useState } from 'react';
import { Button, Grid, TextField } from '@material-ui/core'; import { Button, Grid, TextField } from '@material-ui/core';
interface Props { interface Props {
@ -6,58 +6,46 @@ interface Props {
sendMessage: () => void; sendMessage: () => void;
} }
interface State { export default function MessageInput(props: Props) {
inputText: string; const [inputText, setInputText] = useState<string>('')
}
export default class MessageInput extends React.Component<Props, State> { const sendMessage = () => {
constructor(props: Props) { props.sendMessage()
super(props); setInputText('')
this.state = {
inputText: ''
};
} }
messageHandler(event: ChangeEvent<HTMLInputElement>) { const messageHandler = (event: ChangeEvent<HTMLInputElement>) => {
this.setState({inputText: event.target.value}) setInputText(event.target.value)
this.props.messageHandler(event.target.value); props.messageHandler(event.target.value);
} };
keyPressHandler(event: KeyboardEvent<HTMLInputElement>) { const keyPressHandler = (event: KeyboardEvent<HTMLInputElement>) => {
if (event.key === 'Enter') { if (event.key === 'Enter') {
this.sendMessage() sendMessage()
} }
} }
sendMessage() {
this.props.sendMessage()
this.setState({inputText: ''})
}
render() {
return ( return (
<Grid container spacing={2} direction='row' alignItems='center'> <Grid container spacing={2} direction='row' alignItems='center'>
<Grid item xs={11}> <Grid item xs={11}>
<TextField variant='outlined' <TextField variant='outlined'
label='Send a message' label='Send a message'
value={this.state.inputText} value={inputText}
fullWidth fullWidth
style={{ margin: 8 }} style={{ margin: 8 }}
margin="normal" margin="normal"
InputLabelProps={{ InputLabelProps={{
shrink: true, shrink: true,
}} }}
onChange={this.messageHandler.bind(this)} onChange={messageHandler}
onKeyPress={this.keyPressHandler.bind(this)} onKeyPress={keyPressHandler}
/> />
</Grid> </Grid>
<Grid item xs={1}> <Grid item xs={1}>
<Button variant="contained" color="primary" size="large" onClick={this.sendMessage.bind(this)}> <Button variant="contained" color="primary" size="large" onClick={sendMessage}>
Send Send
</Button> </Button>
</Grid> </Grid>
</Grid> </Grid>
); );
}
} }