Reputation: 309
Just started learning React and I'm not sure how to get the value back from my textfield when I hit the submit button. I'm following the examples here: https://material-ui-next.com/demos/dialogs/ but they never cover how to get the value of the textfield. I've tried a bunch of ways, but keep getting undefined for the value. Here is my current code:
import React from 'react';
import ReactDOM from 'react-dom';
import Button from 'material-ui/Button';
import TextField from 'material-ui/TextField';
import { withStyles } from 'material-ui/styles';
import PropTypes from 'prop-types';
import Dialog, {
DialogActions,
DialogContent,
DialogContentText,
DialogTitle,
} from 'material-ui/Dialog';
import InsertLinkIcon from 'material-ui-icons/Link';
import ReactTooltip from 'react-tooltip'
import Icon from 'material-ui/Icon';
import IconButton from 'material-ui/IconButton';
const button = {
fontSize: '60px',
paddingRight: '20px',
paddingLeft: '20px',
}
const inlineStyle = {
display: 'inline-block',
}
export default class addTorrentPopup extends React.Component {
state = {
open: false,
};
handleClickOpen = () => {
this.setState({ open: true });
};
handleRequestClose = () => {
this.setState({ open: false });
};
handleSubmit = () => {
this.setState({ open: false });
let magnetLinkSubmit = this.state.textValue;
console.log("Sending magnet link: ", magnetLinkSubmit);
ws.send(magnetLinkSubmit);
}
render() {
const { classes, onRequestClose, handleRequestClose, handleSubmit } = this.props;
return (
<div style={inlineStyle}>
<IconButton onClick={this.handleClickOpen} color="primary" data-tip="Add Magnet Link" style={button} centerRipple aria-label="Add Magnet Link" >
<ReactTooltip place="top" type="light" effect="float" />
<InsertLinkIcon />
</IconButton>
<Dialog open={this.state.open} onRequestClose={this.handleRequestClose}>
<DialogTitle>Add Magnet Link</DialogTitle>
<DialogContent>
<DialogContentText>
Add a Magnet Link here and hit submit to add torrent...
</DialogContentText>
<TextField
autoFocus
margin="dense"
id="name"
label="Magnet Link"
type="text"
placeholder="Enter Magnet Link Here"
fullWidth
/>
</DialogContent>
<DialogActions>
<Button onClick={this.handleRequestClose} color="primary">
Cancel
</Button>
<Button onClick={this.handleSubmit} color="primary">
Submit
</Button>
</DialogActions>
</Dialog>
</div>
);
}
};
Upvotes: 3
Views: 6641
Reputation: 491
React supports a special attribute ref
that you can attach to input(or any other element).
The ref attribute takes a callback function, and the callback will be executed immediately after the form is submitted . Here's how it works --
<form>
<input
type="text"
value"this input element will be passed"
ref={$el=>{
//You got the input value here
let inputData = $el.value;
}}
/>
Material UI TextField component supports inputRef
prop which will be added to the native input element.
So this is what you need to add--
<TextField
autoFocus
margin="dense"
id="name"
label="Magnet Link"
type="text"
placeholder="Enter Magnet Link Here"
fullWidth
inputRef={$el=>{
//you got the input value here
const inputValue = $el.value
}}
/>
summary: You can have the value of the Input by passing a ref
method through inputRef
prop of TextField component.
hope it helps
Upvotes: 2
Reputation: 1891
You can use TextField onChange
method to store its value in addTorrentPopup
component.
<TextField
onChange={this.setTextValue}
autoFocus
margin="dense"
id="name"
label="Magnet Link"
type="text"
placeholder="Enter Magnet Link Here"
fullWidth
/>
...
// Implementation of setTextValue method
setTextValue = (event) => {
this.setState({textValue: event.target.value});
}
Upvotes: 5