javascript 我应该为一个更新状态的函数使用useCallback吗?

dy2hfwbg  于 2023-02-07  发布在  Java
关注(0)|答案(1)|浏览(87)

我在React组件中有一个函数handleFileSelect,它对输入文件进行一些处理,并在此基础上更新一些状态,这将触发组件的重新呈现。
但是重新渲染会导致函数被重新创建,那么所有之前处理过的信息都会丢失吗?

  • 那么,我应该使用像useCallback这样的东西来防止重新创建我的函数吗?
  • 如果是这样的话,我不应该对大多数函数这样做吗?
const handleFileSelect = async(event: ChangeEvent < HTMLInputElement > ) => {

  if (event.target.files && event.target.files ? .length > 0) {

    setFormDisabled(true); // state-update
    const file = event.target.files[0];

    if (!imageWithinSizeLimit(file)) {
      sendToast('error', 'File size beyond allowed range! Choose a file lesser than 0.5MB')
      clearImageInput();
      setFormDisabled(false); // state-update
      return;
    }

    const valid = await validateImageType(file);

    if (valid) {
      const fileReader = new FileReader();
      fileReader.readAsDataURL(file)
      fileReader.onload = function(ev) {
        // @ts-ignore
        imagePreviewRef.current ? .setAttribute("src", ev.target.result)
      }
      setImageValid(true);   // state-update
      setFormDisabled(false) // state-update
    } 
    else {
      clearImageInput();
      sendToast('error', "We only accept PNG or JPEG files as Avatar images")
      setFormDisabled(false) // state-update
    }
  }
}
roejwanj

roejwanj1#

答案很简单:没有。
如果不需要将函数作为依赖项进行跟踪,或者不需要在另一个组件中创建组件,则不需要useCallback

相关问题