1 | import React, { useState, lazy, Suspense } from "react";
|
2 | import styles from "./CropBox.scss";
|
3 |
|
4 |
|
5 | const Crop = lazy(
|
6 | () =>
|
7 | new Promise(resolve => {
|
8 | setTimeout(() => {
|
9 | resolve(importName("./Crop", "crop"));
|
10 | }, 1000);
|
11 | })
|
12 | );
|
13 |
|
14 | export default Cropper;
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 | function Cropper(props) {
|
26 | const { name, onSubmit, src, ...rest } = props;
|
27 | const [file, setfile] = useState(null);
|
28 |
|
29 | function submit(value) {
|
30 | onSubmit && onSubmit(value);
|
31 | }
|
32 |
|
33 | const onChange = e => {
|
34 | const file = e.nativeEvent.target.files[0];
|
35 | setfile(file);
|
36 | };
|
37 |
|
38 | return (
|
39 | <div className={styles.container}>
|
40 | <div className={styles.input}>
|
41 | <label className={styles.label}>
|
42 | {name || "选择图片"}
|
43 | <input type="file" onChange={onChange} style={{ display: "none" }} />
|
44 | </label>
|
45 | </div>
|
46 | <img src={src} className={styles.img} />
|
47 | <Suspense fallback={null}>
|
48 | <Crop file={file} onSubmit={submit} width={260} {...rest} />
|
49 | </Suspense>
|
50 | </div>
|
51 | );
|
52 | }
|