Làm thế nào để sử dụng sự kiện onClick trên thành phần Liên kết phản ứng?


82

Tôi đang sử dụng thành phần Liên kết từ bộ định tuyến reactjs và tôi không thể làm cho onClickevent hoạt động. Đây là mã:

<Link to={this.props.myroute} onClick='hello()'>Here</Link>

Đây là cách để làm điều đó hay cách khác?

Câu trả lời:


124

Bạn đang chuyển hello()dưới dạng một chuỗi, cũng hello()có nghĩa là thực thi hellongay lập tức.

thử

onClick={hello}

31

Bạn nên sử dụng cái này:

<Link to={this.props.myroute} onClick={hello}>Here</Link>

Hoặc (nếu phương thức hellonằm ở lớp này):

<Link to={this.props.myroute} onClick={this.hello}>Here</Link>

Cập nhật: Đối với ES6 và phiên bản mới nhất nếu bạn muốn liên kết một số thông số với phương thức nhấp chuột, bạn có thể sử dụng điều này:

    const someValue = 'some';  
....  
    <Link to={this.props.myroute} onClick={() => hello(someValue)}>Here</Link>

4
Hoặc tốt hơnthis.hello.bind(this)
webNeat

4
^ Bạn thực sự nên luôn ràng buộc các hành động trong hàm tạo vì việc ràng buộc theo cách bạn có có thể dẫn đến các vấn đề về hiệu suất.
Nunchucks

Liên kết "tới" là bắt buộc, nhưng thường thì tôi chỉ cần onClick (), hiện tại, tôi phải làm điều gì đó như <Link to="" onClick={this.delete}>Delete</Link>. Tôi muốn "to" là tùy chọn ở đây.
newman

2
@newman Tại sao bạn sẽ sử dụng Linkmà không có to? Nếu bạn không cần nó, thì chỉ cần một số thành phần khác như a <button>với onClickphương thức và bạn đã sẵn sàng;).
Guilherme Oderdenge

23

Tôi không tin rằng đây là một mô hình tốt để sử dụng nói chung. Liên kết sẽ chạy sự kiện onClick của bạn và sau đó điều hướng đến tuyến đường, vì vậy sẽ có một chút chậm trễ khi điều hướng đến tuyến đường mới. Một chiến lược tốt hơn là điều hướng đến tuyến đường mới với 'to' prop như bạn đã làm và trong hàm componentDidMount () của thành phần mới, bạn có thể kích hoạt hàm hello hoặc bất kỳ hàm nào khác. Nó sẽ cung cấp cho bạn kết quả tương tự, nhưng với sự chuyển đổi giữa các tuyến đường mượt mà hơn nhiều.

Đối với ngữ cảnh, tôi nhận thấy điều này khi cập nhật cửa hàng redux của mình với sự kiện onClick trên Liên kết như bạn có ở đây và nó gây ra độ trễ màn hình trắng-trắng ~ 0,3 giây trước khi gắn thành phần của tuyến đường mới. Không có cuộc gọi api nào liên quan, vì vậy tôi ngạc nhiên vì sự chậm trễ lớn đến vậy. Tuy nhiên, nếu bạn chỉ ghi nhật ký bảng điều khiển 'xin chào', sự chậm trễ có thể không đáng chú ý.


Tôi có một url gọi lại trong thành phần hiện tại của mình mà tôi đang lưu trong cookie onClicktrước khi chuyển sang tuyến mới. Tôi sẽ không nhận được url gọi lại đó trong thành phần tiếp theo vì vậy tôi cần làm điều đó trước khi chuyển đổi chính nó. Bạn có bất kỳ thay thế cho điều đó? Tái bút: Url gọi lại phải có thể truy cập được ngay cả sau khi làm mới để có thể lưu nó trong cửa hàng.
Parth Mistry

1
Nếu bạn đang sử dụng điều hướng phản ứng: Tôi sẽ nói rằng không sử dụng Liên kết, chỉ sử dụng TouchableOpacity hoặc TouchableWithoutFeedback, sau đó trong chức năng onPress, bạn có thể điều hướng và chuyển url của mình dưới dạng tham số điều hướng onPress={() => { this.props.navigation.navigate('NameOfNextScreen', { callbackUrl: 'http://.callbackUrl.com', });Nếu bạn không sử dụng điều hướng phản ứng. sẽ chỉ sử dụng onClick của Liên kết và không lo lắng về vấn đề hiệu suất nhỏ. Nó có lẽ sẽ không được chú ý.
Nunchucks

Lời khuyên tốt! Cảm ơn!
ambringsoftwaredev
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.