@thumbtack/tp-ui-react-input v5.3.1
package: '@thumbtack/tp-ui-react-input' kit: element/input.yaml platform: react
url: /api/components/element/input/react/
import Alert from './../../../../www/src/components/alert';
Input with an icon and clear button
Input is a controlled component. This means that the visible text will always match the contents of the value prop.
In this example, notice how value is stored within this.state. The onChange function will set the new value when the user enters or removes a character in the input.
class ClearableInput extends React.Component {
constructor() {
super();
this.state = {
inputText: '1355 Market St.',
};
}
render() {
return (
<div>
<Label for="example-28402">Street address</Label>
<Input
id="example-28402"
value={this.state.inputText}
placeholder="Enter an address"
innerLeft={
<InputIcon>
<ContentModifierMapPinMedium />
</InputIcon>
}
innerRight={
<InputClearButton
onClick={() => {
this.setState({
inputText: '',
});
}}
/>
}
onChange={text => {
this.setState({
inputText: text,
});
}}
/>
</div>
);
}
}Input sizes
Inputs are available in two sizes: small and large. large is the default size.
Small input
class InputExample extends React.Component {
constructor(props) {
super(props);
this.state = {
value: undefined,
};
this.onChange = this.onChange.bind(this);
}
onChange(value) {
this.setState({
value,
});
}
render() {
const { value } = this.state;
return (
<Input
size="small"
value={value}
placeholder="example@example.com"
onChange={this.onChange}
/>
);
}
}Large input
class InputExample extends React.Component {
constructor(props) {
super(props);
this.state = {
value: undefined,
};
this.onChange = this.onChange.bind(this);
}
onChange(value) {
this.setState({
value,
});
}
render() {
const { value } = this.state;
return <Input value={value} placeholder="example@example.com" onChange={this.onChange} />;
}
}Disabled inputs
The isDisabled prop disables the Input visually and functionally.
class InputExample extends React.Component {
constructor(props) {
super(props);
this.state = {
value: undefined,
};
this.onChange = this.onChange.bind(this);
}
onChange(value) {
this.setState({
value,
});
}
render() {
const { value } = this.state;
return (
<Input
isDisabled
placeholder="example@example.com"
value={value}
onChange={this.onChange}
/>
);
}
}Input with an error
The hasError prop only changes the input’s color. It should be used alongside an error message that helps users advance through the form.
class InputExample extends React.Component {
constructor(props) {
super(props);
this.state = {
value: undefined,
};
this.onChange = this.onChange.bind(this);
}
onChange(value) {
this.setState({
value,
});
}
render() {
const { value } = this.state;
return (
<Input
hasError
placeholder="example@example.com"
value={value}
onChange={this.onChange}
/>
);
}
}Button attached to an input
You can use the InputRow component to attach a Button to an Input.
class InputExample extends React.Component {
constructor(props) {
super(props);
this.state = {
value: undefined,
};
this.onChange = this.onChange.bind(this);
}
onChange(value) {
this.setState({
value,
});
}
render() {
const { value } = this.state;
return (
<InputRow widthRatios={[1, null]}>
<Input placeholder="Enter a zip code" onChange={this.onChange} value={value} />
<Button>Find a pro</Button>
</InputRow>
);
}
}