Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
3.8k views
in Technique[技术] by (71.8m points)

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声明这个方法就不会调用
      }
    });
  };

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

2.1m questions

2.1m answers

60 comments

57.0k users

...