2017-08-20 33 views
6

Tôi đang tìm hiểu về phản ứng linh kiện sau khi tài liệu https://facebook.github.io/react/docs/state-and-lifecycle.htmlhàm setInterval mà không mũi tên chức năng

Tại sao chúng ta cần phải sử dụng chức năng mũi tên ở đây:

this.timerID = setInterval(() => this.tick(), 1000); 

Tại sao tôi không thể chỉ nói (rõ ràng nó doesn 'công việc t)

this.timerID = setInterval(this.tick(), 1000); 
+0

'this.timerID = setInterval (function() {this.tick()} .bind (this), 1000);' –

Trả lời

1

setInterval mất chức năng như là đối số đầu tiên, trong trường hợp thứ hai nó là nhận được một giá trị trả về

Thay đổi nó để

this.timerID = setInterval(this.tick.bind(this), 1000); 

hoặc

this.timerID = setInterval(() => this.tick(), 1000); 

mà có lẽ những gì bạn cần khi bạn muốn để ràng buộc các chức năng để các Phản ứng bối cảnh.

Xem câu trả lời này trên why you need to bind functions in React

Nếu bạn không bạn có thể chỉ đơn giản là viết

this.timerID = setInterval(this.tick, 1000); 
5

Đối số đầu tiên cho setInterval là loại function. Nếu bạn viết này:

this.timerID = setInterval(this.tick(), 1000); 

... sau đó bạn không vượt qua một chức năng, thay vào đó bạn thực hiện chức năng this.tick ngay lập tức và sau đó vượt qua giá trị trả về bởi đó gọi hàm như một cuộc tranh cãi.

Bạn thể viết nó như thế này:

this.timerID = setInterval(this.tick, 1000); 

Nếu bạn bỏ qua các dấu ngoặc đơn, bạn vượt qua một tham chiếu đến this.tick chức năng của bạn, sau đó được thực hiện bởi setInterval sau 1000 mili giây.

0

Bạn cần cung cấp một tài liệu tham khảo chức năng, bạn đang cố gắng để gọi một chức năng, trừ khi hàm trả về một tham chiếu chức năng, mã của bạn sẽ không hoạt động

Nó sẽ giống như vậy

this.tick = function() { .... } 

this.timerID = setInterval(this.tick, 1000); 
0

Nếu bạn không sử dụng chức năng mũi tên thì mã của bạn sẽ trông giống như sau:

this.timerID = setInterval(function(){ this.tick() }, 1000); 
Các vấn đề liên quan