想象一下这个方法:
export default function useListenDeletedChatMessages(
chatRoomId = undefined,
{
onNext = undefined,
onError = undefined,
} = {}
) {
const { modifyMessage } = useMessages();
const startAt = useRef(new Date());
useEffect(() => {
if (!chatRoomId) return; <-------- !!!!!
// Listen for new deleted messages
const deletedMessagesListener = listenDeletedChatMessages(
chatRoomId,
startAt.current,
modifyMessage,
onNext,
onError
);
// eslint-disable-next-line consistent-return
return () => {
deletedMessagesListener();
};
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [chatRoomId]);
}
正如你所看到的,我正在声明参数";聊天室Id";作为可选,因为如果没有此参数(不监听聊天消息(,该方法仍然可以工作。
我决定在REACT HOOK中将该参数设置为未定义,因为在我的UI中,乍一看,它是未定义的,直到我的组件装载后执行异步查询。
你可以考虑做一些类似的事情:
if (chatRoomId) {
useListenDeletedChatMessages(chatRoomId);
}
但是,在React中,钩子不能封装在条件语句中。
所以,我的问题是:
我们什么时候应该使用可选参数?因为,对我来说,像这样的东西
function listenChatRoom(roomId = undefined) {}
就像对程序员说,他可以监听一个id是可选的房间(在我的系统中,一个房间总是有一个唯一的id(,我的意思是,这根本没有意义。
有经验法则吗?
如果您有多个组件和挂钩依赖于这个房间id,那么在您有id之前,最好不要首先安装它们。然后他们可以假设id总是定义好的,不必执行所有这些奇怪的检查。