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

今天遇到一个函数没被调用的问题,大概是这样:
有两个页面,消息列表和消息详情页面,点击列表页面进入详情页并传递一个回调函数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声明这个方法就不会调用
      }
    });
  };
阅读 1.4k
1 个回答

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题