Javascript 嗨,我正在尝试添加带有输入参考的材质ui图标按钮以上载图像,但它不起作用

Javascript 嗨,我正在尝试添加带有输入参考的材质ui图标按钮以上载图像,但它不起作用,javascript,reactjs,react-redux,material-ui,Javascript,Reactjs,React Redux,Material Ui,HiI正在尝试添加material UI按钮以上载图像。下面是代码片段和对沙盒的引用,我正在尝试像在图像中一样工作,但不工作 我已经参考了反应上传和其他方法,如何在下面的功能代码中添加删除按钮 代码沙盒链接: [import React,{useRef,useState}来自“React”; 从“反应化身编辑器”导入化身编辑器; 从“@material ui/core/Avatar”导入化身; 从“@material ui/core/styles/MuiThemeProvider”导入MuiT

HiI正在尝试添加material UI按钮以上载图像。下面是代码片段和对沙盒的引用,我正在尝试像在图像中一样工作,但不工作 我已经参考了反应上传和其他方法,如何在下面的功能代码中添加删除按钮

代码沙盒链接:

[import React,{useRef,useState}来自“React”;
从“反应化身编辑器”导入化身编辑器;
从“@material ui/core/Avatar”导入化身;
从“@material ui/core/styles/MuiThemeProvider”导入MuiThemeProvider;
从“@material ui/core/Slider”导入滑块;
进口{
盒子,
排版,
按钮
IconButton,
网格,
分隔器,
}来自“@材料界面/核心”;
//从“反应图像上传”导入图像上传;
导出默认函数映像(){
常量\[状态,设置状态\]=useState({
cropperOpen:错,
img:null,
缩放:2,
旋转:0,
croppedImg:“,
});
const editorRef=useRef(null);
const inputRef=useRef(null);
函数handleZoomSlider(事件、值){
setState((prev)=>({…prev,缩放:值}));
}
功能手柄文件更改(e){
常量createObjectURL=
(window.URL | | window.webkitURL).createObjectURL||
window.createObjectURL;
const file=e.target.files\[0\];
//console.log(文件);
const image_url=createObjectURL(文件);
设定状态({
tmpphotour:image\u url,
档案:档案,
});
};
//功能手柄文件更改(e){
//window.URL=window.URL | | window.webkitURL;
//让url=window.url.createObjectURL(e.target.files\[0\]);
//inputRef.current.value=“”;
//setState((prev)=>({…prev,img:url,crapperopen:true});
//   }
函数handleCancel(){
setState((prev)=>({…prev,cropperOpen:false});
}
handleSave函数(e){
如果(编辑引用当前){
const canvascaled=editorRef.current.getImageScaledToCanvas();
const cropedimg=canvascaled.toDataURL();
setState((prev)=>({…prev,cropperOpen:false,cropperimg}));
}
}
返回(
上传图像
][1]
您必须使用
上传任何类型的文件。如果您希望看起来像“材质”按钮,请使用自定义css

-这里有一个示例,用于“React”中的上载按钮[import React,{useRef,useState};
        [import React, { useRef, useState } from "react";
import AvatarEditor from "react-avatar-editor";
import Avatar from "@material-ui/core/Avatar";
import MuiThemeProvider from "@material-ui/core/styles/MuiThemeProvider";
import Slider from "@material-ui/core/Slider";
import {
  Box,
  Typography,
  Button,
  IconButton,
  Grid,
  Divider,
} from "@material-ui/core";
// import ImageUploading from "react-images-uploading";

export default function Images() {
  const \[state, setState\] = useState({
    cropperOpen: false,
    img: null,
    zoom: 2,
    rotate: 0,
    croppedImg: "",
  });


  const editorRef = useRef(null);
  const inputRef = useRef(null);

  function handleZoomSlider(event, value) {
    setState((prev) => ({ ...prev, zoom: value }));
  }

 function handleFileChange (e) {
    const createObjectURL =
      (window.URL || window.webkitURL).createObjectURL ||
      window.createObjectURL;

    const file = e.target.files\[0\];
    // console.log(file);
    const image_url = createObjectURL(file);
    setState({
      tmpPhotoURL: image_url,
      file: file,
    });
  };

//   function handleFileChange(e) {
//     window.URL = window.URL || window.webkitURL;
//     let url = window.URL.createObjectURL(e.target.files\[0\]);

//     inputRef.current.value = "";
//     setState((prev) => ({ ...prev, img: url, cropperOpen: true }));
//   }

  function handleCancel() {
    setState((prev) => ({ ...prev, cropperOpen: false }));
  }



  function handleSave(e) {
    if (editorRef.current) {
      const canvasScaled = editorRef.current.getImageScaledToCanvas();
      const croppedImg = canvasScaled.toDataURL();

      setState((prev) => ({ ...prev, cropperOpen: false, croppedImg }));
    }
  }

  return (
    <MuiThemeProvider>
      
      
          <div style={{ height: 100, width: 120 }}>
            <Avatar src={state.croppedImg} size={100} />

          
                <Button
                  //   label="Upload an Image"
                  //   labelPosition="before"
                  //   containerElement="label"
                  size="medium"
                  variant="contained"
                
                  color="secondary"
                 
                  ref={inputRef}
                  type="file"
                  accept="image/*"
                  onChange={handleFileChange}
                >
                    
                  Upload an Image
                </Button>][1]
从“反应化身编辑器”导入化身编辑器; 从“@material ui/core/Avatar”导入化身; 从“@material ui/core/styles/MuiThemeProvider”导入MuiThemeProvider; 从“@material ui/core/Slider”导入滑块; 进口{ 盒子, 排版, 按钮 IconButton, 网格, 分隔器, }来自“@材料界面/核心”; //从“反应图像上传”导入图像上传; 导出默认函数映像(){ 常量\[状态,设置状态\]=useState({ cropperOpen:错, img:null, 缩放:2, 旋转:0, croppedImg:“, }); const editorRef=useRef(null); const inputRef=useRef(null); 函数handleZoomSlider(事件、值){ setState((prev)=>({…prev,缩放:值})); } 功能手柄文件更改(e){ 常量createObjectURL= (window.URL | | window.webkitURL).createObjectURL|| window.createObjectURL; const file=e.target.files\[0\]; //console.log(文件); const image_url=createObjectURL(文件); 设定状态({ tmpphotour:image\u url, 档案:档案, }); }; //功能手柄文件更改(e){ //window.URL=window.URL | | window.webkitURL; //让url=window.url.createObjectURL(e.target.files\[0\]); //inputRef.current.value=“”; //setState((prev)=>({…prev,img:url,crapperopen:true}); // } 函数handleCancel(){ setState((prev)=>({…prev,cropperOpen:false}); } handleSave函数(e){ 如果(编辑引用当前){ const canvascaled=editorRef.current.getImageScaledToCanvas(); const cropedimg=canvascaled.toDataURL(); setState((prev)=>({…prev,cropperOpen:false,cropperimg})); } } 返回( 上传图像 ][1]

任何人都可以在codesandbox中帮助图像设计

我已经尝试了使用材质ui的自定义css,但上面的代码格式不起作用。请从“@material ui/core”导入{按钮,};检查我提供的链接我尝试了图标按钮,但没有使用输入引用。你可以在code sandbox中尝试一下设计并共享它吗
        [import React, { useRef, useState } from "react";
import AvatarEditor from "react-avatar-editor";
import Avatar from "@material-ui/core/Avatar";
import MuiThemeProvider from "@material-ui/core/styles/MuiThemeProvider";
import Slider from "@material-ui/core/Slider";
import {
  Box,
  Typography,
  Button,
  IconButton,
  Grid,
  Divider,
} from "@material-ui/core";
// import ImageUploading from "react-images-uploading";

export default function Images() {
  const \[state, setState\] = useState({
    cropperOpen: false,
    img: null,
    zoom: 2,
    rotate: 0,
    croppedImg: "",
  });


  const editorRef = useRef(null);
  const inputRef = useRef(null);

  function handleZoomSlider(event, value) {
    setState((prev) => ({ ...prev, zoom: value }));
  }

 function handleFileChange (e) {
    const createObjectURL =
      (window.URL || window.webkitURL).createObjectURL ||
      window.createObjectURL;

    const file = e.target.files\[0\];
    // console.log(file);
    const image_url = createObjectURL(file);
    setState({
      tmpPhotoURL: image_url,
      file: file,
    });
  };

//   function handleFileChange(e) {
//     window.URL = window.URL || window.webkitURL;
//     let url = window.URL.createObjectURL(e.target.files\[0\]);

//     inputRef.current.value = "";
//     setState((prev) => ({ ...prev, img: url, cropperOpen: true }));
//   }

  function handleCancel() {
    setState((prev) => ({ ...prev, cropperOpen: false }));
  }



  function handleSave(e) {
    if (editorRef.current) {
      const canvasScaled = editorRef.current.getImageScaledToCanvas();
      const croppedImg = canvasScaled.toDataURL();

      setState((prev) => ({ ...prev, cropperOpen: false, croppedImg }));
    }
  }

  return (
    <MuiThemeProvider>
      
      
          <div style={{ height: 100, width: 120 }}>
            <Avatar src={state.croppedImg} size={100} />

          
                <Button
                  //   label="Upload an Image"
                  //   labelPosition="before"
                  //   containerElement="label"
                  size="medium"
                  variant="contained"
                
                  color="secondary"
                 
                  ref={inputRef}
                  type="file"
                  accept="image/*"
                  onChange={handleFileChange}
                >
                    
                  Upload an Image
                </Button>][1]