【发布时间】:2021-12-28 08:10:50
【问题描述】:
想象一下这个方法:
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]);
}
如您所见,我将参数“chatRoomId”声明为可选,因为没有此参数(不收听聊天消息)该方法仍然有效。
我决定在这个 REACT HOOK 中将该参数设置为未定义,因为在我的 UI 中,乍一看,它是未定义的,直到在我的组件安装后执行异步查询。 p>
你可能会考虑做这样的事情:
if (chatRoomId) {
useListenDeletedChatMessages(chatRoomId);
}
但是,在 React 中,钩子不能被包裹在条件中。
所以,我的问题是:
我们什么时候应该使用可选参数?因为,对我来说,像
function listenChatRoom(roomId = undefined) {}
就像对程序员说他可以监听一个 id 是可选的房间(而且,在我的系统中,一个房间总是有一个唯一的 id),我的意思是,它根本没有意义。
有什么经验法则吗?
【问题讨论】:
-
顺便说一句,
onNext = undefined是多余的。未知的解构值总是未定义的。
标签: javascript reactjs function refactoring software-quality