ReactHook中声明函数使不使用关键字的区别

发布于 2022-09-12 13:36:24 字数 987 浏览 12 评论 0

今天遇到一个函数没被调用的问题,大概是这样:
有两个页面,消息列表和消息详情页面,点击列表页面进入详情页并传递一个回调函数reloadMessage,在这个函数里调用了列表页的refreshData方法,然后在详情页面返回列表页的时候调用这个回调函数。发现refreshData这个方法没有调用,然后我在前面加了const关键字就可以调用了

这是什么原因呢?加不加关键字有什么区别呢,是不是如果不加关键字这个方法就类似class组件中的静态方法,但是像getMessageData方法也没有const声明也能被调用。

列表页面:

const MessageList = ({ navigation, setmessageTotal }) => {
  useEffect(() => {
    getMessageData(1,false);
  }, []);
  getMessageData = (page,isLoadMore) => {
    let url = buildUrl(page);
    setRequest({
      isLoadMore,
      urls: [url],
    });
  }
  refreshData = () => {
    console.log('有没有执行')
    getMessageData(1,false);
  }
  //* 进入详情页
  handleMessage = (item) => {
    navigation.navigate("NoticeDetail", {
      notice: item,
      reloadMessage: () => {//* 详情页回调这个方法
        refreshData()//* 如果不用const声明这个方法就不会调用
      }
    });
  };

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

巴黎夜雨 2022-09-19 13:36:24

在函数中使用 let、const 关键字进行显式声明的变量是做为局部变量,在全局范围内声明的变量为全局变量;而没有用关键字,使用直接赋值方式声明的变量会被提升到全局作用域中。也就是不加关键字直接赋值,他的作用域是全局的,你这样不加关键字的做法非常不好,建议你在开发中尽量少些这种代码。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文