我正在尝试使用 useEffect' 来更改 window。我没有收到任何错误,但它不起作用。怎么了?如何让它发挥作用?

I'm trying to use useEffect' for changing window. I do not get any error, but it doesn't work. What is wrong? How to make it work?

通过 dropzone,我正在上传或删除文件。 我想要做的是根据已删除的文件类型打开一个新的 window 类型。 为此,我尝试使用 useEffect 挂钩。但它不会产生任何错误并且不起作用:

const [win, setWin] = useState("A-Type");

let accepted_file = acceptedFiles[0];

useEffect(() => {
  function handleSecondWindowType () {
    if (accepted_file.type.includes('image/')) {
      setWin("A-Type")
    }
    else {
      setWin("B-Type");
    }
  }
},[accepted_file]);

您似乎创建了一个内部函数,但忘记调用它。你必须调用它,否则什么都不会发生:

useEffect(() => {
  // call it
  handleSecondWindowType();

  function handleSecondWindowType () {
    if (accepted_file.type.includes('image/')) {
      setWin("A-Type")
    }
    else {
      setWin("B-Type");
    }
  }
},[accepted_file]);

你可以像tmhao2005说的那样调用,或者去掉额外的函数声明即可

useEffect(() => {
    if (accepted_file.type.includes('image/')) {
      setWin("A-Type")
    }
    else {
      setWin("B-Type");
    }
}, [accepted_file]);

另一种可能是这样的:

function handleSecondWindowType() {
    if (accepted_file.type.includes('image/')) {
      setWin("A-Type")
    }
    else {
      setWin("B-Type");
    }
}

useEffect(handleSecondWindowType, [accepted_file]);