【问题标题】:JS - When to declare optional arguments?JS - 何时声明可选参数?
【发布时间】: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


【解决方案1】:

如果您有多个依赖于此房间 ID 的组件和挂钩,那么最好不要在您拥有 ID 之前安装它们。然后他们可以假设 id 总是被定义并且不必执行所有这些奇怪的检查。

【讨论】:

    猜你喜欢
    • 2017-12-01
    • 2012-12-25
    • 2012-09-29
    • 2020-09-04
    • 2014-06-16
    • 1970-01-01
    • 2017-12-16
    • 2015-01-28
    • 1970-01-01
    相关资源
    最近更新 更多