index.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import React, { PureComponent } from 'react';
  2. import { Input, Icon } from 'antd';
  3. import styles from './index.less';
  4. export default class EditableItem extends PureComponent {
  5. constructor(props) {
  6. super(props);
  7. this.state = {
  8. value: props.value,
  9. editable: false,
  10. };
  11. }
  12. handleChange = e => {
  13. const { value } = e.target;
  14. this.setState({ value });
  15. };
  16. check = () => {
  17. this.setState({ editable: false });
  18. const { value } = this.state;
  19. const { onChange } = this.props;
  20. if (onChange) {
  21. onChange(value);
  22. }
  23. };
  24. edit = () => {
  25. this.setState({ editable: true });
  26. };
  27. render() {
  28. const { value, editable } = this.state;
  29. return (
  30. <div className={styles.editableItem}>
  31. {editable ? (
  32. <div className={styles.wrapper}>
  33. <Input value={value} onChange={this.handleChange} onPressEnter={this.check} />
  34. <Icon type="check" className={styles.icon} onClick={this.check} />
  35. </div>
  36. ) : (
  37. <div className={styles.wrapper}>
  38. <span>{value || ' '}</span>
  39. <Icon type="edit" className={styles.icon} onClick={this.edit} />
  40. </div>
  41. )}
  42. </div>
  43. );
  44. }
  45. }