构建React Hook 共享逻辑场景及传统做法

一、共享逻辑场景及传统做法二、创建自定义 Hook三、使用自定义 Hook1、上面代码是否功能相同?2、是否必须以 use 开头设置自定义 Hook?3、使用相同的 Hook 的两个 Component 会共享 state 吗?4、自定义 Hook 如何获取隔离 state?四、Tip:在 Hook 之间传递信息扩展 一、共享逻辑场景及传统做法构建自己的 Hook 能够...
摘要由CSDN通过智能技术生成

一、共享逻辑场景及传统做法
二、创建自定义 Hook
三、使用自定义 Hook
1、上面代码是否功能相同?
2、是否必须以 use 开头设置自定义 Hook?
3、使用相同的 Hook 的两个 Component 会共享 state 吗?
4、自定义 Hook 如何获取隔离 state?
四、Tip:在 Hook 之间传递信息
扩展

 

一、共享逻辑场景及传统做法

构建自己的 Hook 能够将组件逻辑提取到可重用的函数中。

下面代码是 React Hook 文档中使用 Effect Hook 的时候构造的一个聊天应用程序,这个组件显示一条消息,指示朋友是在线还是离线:

import { useState, useEffect } from 'react';

function FriendStatus(props) {
  const [isOnline, setIsOnline] = useState(null);

  function handleStatusChange(status) {
    setIsOnline(status.isOnline);
  }

  useEffect(() => {
    ChatAPI.subscribeToFriendStatus(props.friend.id, handleStatusChange);
    return () => {
      ChatAPI.unsubscribeFromFriendStatus(props.friend.id, handleStatusChange);
    };
  });

  if (isOnline === null) {
    return 'Loading...';
  }
  return isOnline ? 'Online' : 'Offline';
}

现在比如说聊天应用程序中也有一个联系人列表组件,而在这个列表中,想要把在线的用户名显示绿色。之前的做法可能是把上面订阅的逻辑在复制到 FriendListItem 组件中,不过这不是理想的做法:

import { useState, useEffect } from 'react';

function FriendListItem(props) {
  const [isOnline, setIsOnline] = useState(null);

  function handleStatusChange(status) {
    setIsOnline(status.isOnline);
  }

  useEffect(() => {
    ChatAPI.subscribeToFriendStatus(props.friend.id, handleStatusChange);
    return () => {
      ChatAPI.unsubscribeFromFriendStatus(props.friend.id, handleStatusChange);
    };
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值