首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >index.js:1警告:错误的道具类型:无效的道具` prop‘类型` of’提供给‘`ForwardRef(阿凡达)’,预期的‘`string`’

index.js:1警告:错误的道具类型:无效的道具` prop‘类型` of’提供给‘`ForwardRef(阿凡达)’,预期的‘`string`’
EN

Stack Overflow用户
提问于 2022-02-23 10:30:18
回答 1查看 1K关注 0票数 0

我有一个项目,这个项目是关于组织用户的操作,每个用户都有他的帐户的某些设置,从这些设置中他可以点击他的图像(化身)并选择一个图像并将它添加到配置文件帐户中。

但我发现了一个错误:

代码语言:javascript
复制
index.js:1 Warning: Failed prop type: Invalid prop `src` of type `object` supplied to `ForwardRef(Avatar)`, expected `string`.

我该怎么解决呢?

此文件包含添加帐户图片的整个徽标。

profilePage.js:

代码语言:javascript
复制
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;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-23 10:43:15

代码语言:javascript
复制
const fileSelectHandler = (event) => {
    console.log("beore event");
    setSelectedFile(event.target.files[0]);
    console.log("after event");
  };

我认为在上面的函数中,event.target.files中有一个对象

您必须在下面的状态示例代码中设置特定的对象属性:

代码语言:javascript
复制
const fileSelectHandler = (event) => {
    const value = event?.target?.files[0]?.name;
    console.log("beore event",value);
    setSelectedFile(()=>value);
    console.log("after event",value);
  };
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71235263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档