Javascript 嗨,我正在尝试添加带有输入参考的材质ui图标按钮以上载图像,但它不起作用
HiI正在尝试添加material 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
[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]