index.js:1 警告:道具类型失败:提供给“ForwardRef(Avatar)”的“object”类型的道具“src”无效,预期为“string”
index.js:1 Warning: Failed prop type: Invalid prop `src` of type `object` supplied to `ForwardRef(Avatar)`, expected `string`
我有一个项目,这个项目是组织用户的操作,每个用户对他的账户都有一定的设置,从这些设置中他可以点击他的头像(头像),选择一张图片并添加到个人资料帐户
但是我得到了这个错误:
index.js:1 Warning: Failed prop type: Invalid prop `src` of type `object` supplied to `ForwardRef(Avatar)`, expected `string`.
我该如何解决?
并且此文件包含用于添加帐户图片的整个徽标
profilePage.js:
const useStyles = makeStyles((theme) => ({
avatar: {
border: `4px solid ${theme.palette.background.default}`,
},
topBg: {
background: 'url("assets/images/profile/morain-lake.jpg")!important',
backgroundSize: "cover!important",
backgroundPosition: "center center!important",
},
layoutHeader: {
background: "none",
height: 320,
minHeight: 320,
[theme.breakpoints.down("md")]: {
height: 240,
minHeight: 240,
},
},
}));
function ProfilePage() {
const classes = useStyles();
const [selectedTab, setSelectedTab] = useState(0);
const [selectedFile, setSelectedFile] = useState(null);
function handleTabChange(event, value) {
setSelectedTab(value);
}
const fileSelectHandler = (event) => {
console.log("beore event");
setSelectedFile(event.target.files[0]);
console.log("after event");
};
const fileUploadHandler = () => {
const fd = new FormData();
fd.append("image", selectedFile, selectedFile.name);
axios.post("/app-files", fd).then((res) => {
console.log("res: ", res);
// onUploadProgress: (ProgressEvent) => {
// console.log(
// "Upload Progress: " +
// Math.round((ProgressEvent.loaded / ProgressEvent.total) * 100) +
// "%"
// );
// };
});
};
return (
<FusePageSimple
classes={{
topBg: classes.topBg,
header: classes.layoutHeader,
wrapper: "bg-transparent",
content: "w-full max-w-2xl mx-auto",
toolbar:
"w-full max-w-2xl mx-auto relative flex flex-col min-h-auto h-auto items-start",
}}
header={<></>}
contentToolbar={
<>
<div className="w-full px-24 pb-48 flex flex-col md:flex-row flex-1 items-center">
<motion.div
initial={{ scale: 0 }}
animate={{ scale: 1, transition: { delay: 0.1 } }}
>
<input
type="file"
// onChange={handleChange}
// style={{ display: "none" }}
id="upload"
accept="image/*"
style={{ display: "none" }}
onChange={fileSelectHandler}
// ref={(fileInput) => (this.fileInput = fileInput)}
/>
<label htmlFor="upload">
<IconButton
color="primary"
aria-label="upload picture"
component="span"
onClick={fileUploadHandler}
// onClick={() => this.fileInput.click()}
>
<Avatar
className={clsx(classes.avatar, "-mt-64 w-128 h-128")}
src={selectedFile}
// onClick={fileUploadHandler}
/>
</IconButton>
</label>
</motion.div>
<div className="flex flex-col md:flex-row flex-1 items-center justify-between p-8">
<motion.div
initial={{ opacity: 0, x: -40 }}
animate={{ opacity: 1, x: 0, transition: { delay: 0.2 } }}
>
<Typography
className="md:px-16 text-24 md:text-32 font-semibold tracking-tight"
variant="h4"
color="inherit"
>
John Doe
</Typography>
</motion.div>
<div className="flex items-center justify-end -mx-4 mt-24 md:mt-0">
<Button
className="mx-8"
variant="contained"
color="secondary"
aria-label="Follow"
>
Follow
</Button>
<Button
variant="contained"
color="primary"
aria-label="Send Message"
>
Send Message
</Button>
</div>
</div>
</div>
<Tabs
value={selectedTab}
onChange={handleTabChange}
indicatorColor="primary"
textColor="inherit"
variant="scrollable"
scrollButtons="off"
className="w-full px-24 -mx-4 min-h-40"
classes={{
indicator: "flex justify-center bg-transparent w-full h-full",
}}
TabIndicatorProps={{
children: (
<Divider className="w-full h-full rounded-full opacity-50" />
),
}}
>
<Tab
className="text-14 font-semibold min-h-40 min-w-64 mx-4"
disableRipple
label="Timeline"
/>
<Tab
className="text-14 font-semibold min-h-40 min-w-64 mx-4"
disableRipple
label="About"
/>
<Tab
className="text-14 font-semibold min-h-40 min-w-64 mx-4"
disableRipple
label="Photos & Videos"
/>
</Tabs>
</>
}
content={
<div className="p-16 sm:p-24">
{selectedTab === 0 && <TimelineTab />}
{selectedTab === 1 && <AboutTab />}
{selectedTab === 2 && <PhotosVideosTab />}
</div>
}
/>
);
}
export default ProfilePage;
const fileSelectHandler = (event) => {
console.log("beore event");
setSelectedFile(event.target.files[0]);
console.log("after event");
};
我想在上面的函数中你有一个对象在 event.target.files[0]
您必须在状态中设置特定对象 属性
下面的示例代码:
const fileSelectHandler = (event) => {
const value = event?.target?.files[0]?.name;
console.log("beore event",value);
setSelectedFile(()=>value);
console.log("after event",value);
};
我有一个项目,这个项目是组织用户的操作,每个用户对他的账户都有一定的设置,从这些设置中他可以点击他的头像(头像),选择一张图片并添加到个人资料帐户
但是我得到了这个错误:
index.js:1 Warning: Failed prop type: Invalid prop `src` of type `object` supplied to `ForwardRef(Avatar)`, expected `string`.
我该如何解决?
并且此文件包含用于添加帐户图片的整个徽标
profilePage.js:
const useStyles = makeStyles((theme) => ({
avatar: {
border: `4px solid ${theme.palette.background.default}`,
},
topBg: {
background: 'url("assets/images/profile/morain-lake.jpg")!important',
backgroundSize: "cover!important",
backgroundPosition: "center center!important",
},
layoutHeader: {
background: "none",
height: 320,
minHeight: 320,
[theme.breakpoints.down("md")]: {
height: 240,
minHeight: 240,
},
},
}));
function ProfilePage() {
const classes = useStyles();
const [selectedTab, setSelectedTab] = useState(0);
const [selectedFile, setSelectedFile] = useState(null);
function handleTabChange(event, value) {
setSelectedTab(value);
}
const fileSelectHandler = (event) => {
console.log("beore event");
setSelectedFile(event.target.files[0]);
console.log("after event");
};
const fileUploadHandler = () => {
const fd = new FormData();
fd.append("image", selectedFile, selectedFile.name);
axios.post("/app-files", fd).then((res) => {
console.log("res: ", res);
// onUploadProgress: (ProgressEvent) => {
// console.log(
// "Upload Progress: " +
// Math.round((ProgressEvent.loaded / ProgressEvent.total) * 100) +
// "%"
// );
// };
});
};
return (
<FusePageSimple
classes={{
topBg: classes.topBg,
header: classes.layoutHeader,
wrapper: "bg-transparent",
content: "w-full max-w-2xl mx-auto",
toolbar:
"w-full max-w-2xl mx-auto relative flex flex-col min-h-auto h-auto items-start",
}}
header={<></>}
contentToolbar={
<>
<div className="w-full px-24 pb-48 flex flex-col md:flex-row flex-1 items-center">
<motion.div
initial={{ scale: 0 }}
animate={{ scale: 1, transition: { delay: 0.1 } }}
>
<input
type="file"
// onChange={handleChange}
// style={{ display: "none" }}
id="upload"
accept="image/*"
style={{ display: "none" }}
onChange={fileSelectHandler}
// ref={(fileInput) => (this.fileInput = fileInput)}
/>
<label htmlFor="upload">
<IconButton
color="primary"
aria-label="upload picture"
component="span"
onClick={fileUploadHandler}
// onClick={() => this.fileInput.click()}
>
<Avatar
className={clsx(classes.avatar, "-mt-64 w-128 h-128")}
src={selectedFile}
// onClick={fileUploadHandler}
/>
</IconButton>
</label>
</motion.div>
<div className="flex flex-col md:flex-row flex-1 items-center justify-between p-8">
<motion.div
initial={{ opacity: 0, x: -40 }}
animate={{ opacity: 1, x: 0, transition: { delay: 0.2 } }}
>
<Typography
className="md:px-16 text-24 md:text-32 font-semibold tracking-tight"
variant="h4"
color="inherit"
>
John Doe
</Typography>
</motion.div>
<div className="flex items-center justify-end -mx-4 mt-24 md:mt-0">
<Button
className="mx-8"
variant="contained"
color="secondary"
aria-label="Follow"
>
Follow
</Button>
<Button
variant="contained"
color="primary"
aria-label="Send Message"
>
Send Message
</Button>
</div>
</div>
</div>
<Tabs
value={selectedTab}
onChange={handleTabChange}
indicatorColor="primary"
textColor="inherit"
variant="scrollable"
scrollButtons="off"
className="w-full px-24 -mx-4 min-h-40"
classes={{
indicator: "flex justify-center bg-transparent w-full h-full",
}}
TabIndicatorProps={{
children: (
<Divider className="w-full h-full rounded-full opacity-50" />
),
}}
>
<Tab
className="text-14 font-semibold min-h-40 min-w-64 mx-4"
disableRipple
label="Timeline"
/>
<Tab
className="text-14 font-semibold min-h-40 min-w-64 mx-4"
disableRipple
label="About"
/>
<Tab
className="text-14 font-semibold min-h-40 min-w-64 mx-4"
disableRipple
label="Photos & Videos"
/>
</Tabs>
</>
}
content={
<div className="p-16 sm:p-24">
{selectedTab === 0 && <TimelineTab />}
{selectedTab === 1 && <AboutTab />}
{selectedTab === 2 && <PhotosVideosTab />}
</div>
}
/>
);
}
export default ProfilePage;
const fileSelectHandler = (event) => {
console.log("beore event");
setSelectedFile(event.target.files[0]);
console.log("after event");
};
我想在上面的函数中你有一个对象在 event.target.files[0]
您必须在状态中设置特定对象 属性 下面的示例代码:
const fileSelectHandler = (event) => {
const value = event?.target?.files[0]?.name;
console.log("beore event",value);
setSelectedFile(()=>value);
console.log("after event",value);
};