我在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
}
}
}
1条答案
按热度按时间roejwanj1#
答案很简单:没有。
如果不需要将函数作为依赖项进行跟踪,或者不需要在另一个组件中创建组件,则不需要useCallback