【发布时间】:2022-01-25 08:24:47
【问题描述】:
基本上,在将图像上传到 Firebase 之前,我会尝试将输入控制为:
export const controlThumbnail = (selectedThumbnail, setThumbnailError) => {
if (!selectedThumbnail) {
setThumbnailError('Please select a thumbnail!');
return;
}
if (!selectedThumbnail.type.includes('image')) {
setThumbnailError('Please select an image!');
return;
}
if (selectedThumbnail.size > 1000000) {
setThumbnailError('Image size must be less than 1MB!');
return;
}
setThumbnailError(null);
};
我把上面的方法从 /lib/controlThumbnail.js 调用到:
import { controlThumbnail } from '../../lib/controlThumbnail';
const Signup = () => {
const [userInfo, setUserInfo] = useState({
name: '',
email: '',
password: '',
thumbnail: null
});
const [thumbnailError, setThumbnailError] = useState(null);
const userInputHandler = (e) => {
setUserInfo((prevUserInfo) => {
if (e.target.name === 'thumbnail') {
const thumbnail = e.target.files[0];
controlThumbnail(thumbnail, setThumbnailError);
return { ...prevUserInfo, thumbnail };
} else {
return { ...prevUserInfo, [e.target.name]: e.target.value };
}
});
};
...
所以,这现在可以正常工作,但我想知道这是否是这样做的好方法?还是应该把控制方法放在组件里面,不给 setState 作为参数?
【问题讨论】:
-
为什么不直接从
controlThumbnail()返回错误信息,然后设置为state呢?如果它仅生成错误消息,为什么将其命名为“控制缩略图”?我认为没有必要将设置状态的责任传递给它。我也不确定你为什么不使用else ifs。 -
@Vektor 哦,是的,我只是按照你说的做了,让它在'if' 之一匹配时只返回字符串,或者返回 null。现在我没有通过设置状态的责任,这让我很困扰。呃,它应该被命名为 checkThumbnail 还是什么?我不在那里使用 else ifs,因为我认为这些案例(如果存在,大小和类型)彼此不相关,我的意思是如果我还需要检查 pdf 的类型,我将 else if 添加到第二个...这是错的吗?
-
从理论上讲,
else if可以工作,但在这种情况下没有必要。
标签: javascript reactjs frontend