taro-material
Version:
Mini Program components that implement Google's Material Design.
74 lines (67 loc) • 1.74 kB
JavaScript
import Taro, { Component } from '@tarojs/taro';
import PropTypes from 'prop-types';
import { View } from '@tarojs/components';
import classNames from 'classnames';
import AtTextarea from '../components/textarea';
import './Textarea.scss';
class RMTextarea extends Component {
constructor(props) {
super(props);
this.state = {
show: false,
};
}
handleChange(value) {
const { onChange } = this.props;
onChange(value);
}
handleClick() {
this.setState({
show: true,
});
}
handleBlur() {
this.setState({
show: false,
});
}
render() {
const { show, square, value, placeholder, maxlength } = this.props;
const length = value ? value.length : 0;
const countText = `${length}/${maxlength}`;
return (
<View className="root">
{show ? (
<View className="textareaBox">
<AtTextarea
value={value}
onChange={this.handleChange.bind(this)}
maxlength={maxlength}
placeholder={placeholder}
autoFocus={show}
onBlur={this.handleBlur.bind(this)}
/>
</View>
) : (
<View
onClick={this.handleClick.bind(this)}
className={classNames({ fakeTextarea: true, rounded: !square })}
>
<View className="text">
{value || <View className="placeholder">{placeholder}</View>}
</View>
<View className="count">{countText}</View>
</View>
)}
</View>
);
}
}
RMTextarea.defaultProps = {
value: '',
onChange: () => {},
maxlength: 200,
placeholder: '请输入...',
square: false,
};
export default RMTextarea;