React-Router เปิดลิงค์ในแท็บใหม่


91

มีวิธีรับReact Routerเพื่อเปิดลิงค์ในแท็บใหม่หรือไม่? ฉันลองสิ่งนี้แล้วก็ไม่ได้ผล

<Link to="chart" target="_blank" query={{test: this.props.test}} >Test</Link>

เป็นไปได้ที่จะทำให้ยุ่งเหยิงโดยการเพิ่มสิ่งที่ต้องการonClick="foo"ลงในลิงก์เช่นเดียวกับที่ฉันมีด้านบน แต่จะมีข้อผิดพลาดคอนโซล

ขอบคุณ.

คำตอบ:


41

ฉันคิดว่าคอมโพเนนต์ลิงก์ไม่มีอุปกรณ์ประกอบฉาก

คุณสามารถมีทางเลือกอื่นได้โดยสร้างแท็กและใช้เมธอด makeHref ของ Navigation mixin เพื่อสร้าง url ของคุณ

<a target='_blank' href={this.makeHref(routeConsts.CHECK_DOMAIN, {},
   { realm: userStore.getState().realms[0].name })}>
        Share this link to your webmaster
</a>

นี่คือการเรียกใช้ฟังก์ชันการโทรด้วยตนเอง href ซึ่งจะทำให้เกิดการแจ้งเตือนอีกครั้ง!
Anupam Maurya

ฉันเชื่อว่าฟังก์ชัน makeHref ถูกเปลี่ยนชื่อเป็น createHref และตั้งแต่ถูกลบออก stackoverflow.com/a/35066996/6004931 github.com/ReactTraining/history/issues/365
Nick Graham

82

ใน React Router เวอร์ชัน 5.0.1 ขึ้นไปคุณสามารถใช้:

<Link to="route" target="_blank" onClick={(event) => {event.preventDefault(); window.open(this.makeHref("route"));}} />

47
React Router รุ่นปัจจุบันคืออะไร;)
Abhishek Nalin

1
@AbhishekNalin วิธีรับ this.makeHref และส่งพารามิเตอร์ในด้านนี้ MakeHref
Dharmesh

16
ใน react-router 5.0.1 ดูเหมือนว่าการเพิ่มtarget="_blank"ก็เพียงพอแล้วที่จะทำเคล็ดลับ
mscrivo

7
หมายเหตุนี้แสดงความคิดเห็น ใช้rel='noopener noreferrer'ถ้าคุณใช้target="_blank"
Gaspar

ขอขอบคุณ! target="_blank"ทำงานให้ฉัน :) ใน react-router 5.0.1
Rachit Magon

34

เราสามารถใช้ตัวเลือกต่อไปนี้: -

 // first option is:-
    <Link to="myRoute" params={myParams} target="_blank">

 // second option is:-
    var href = this.props.history.createHref('myRoute', myParams);
    <a href={href} target="_blank">

 //third option is:-
    var href = '/myRoute/' + myParams.foo + '/' + myParams.bar;
    <a href={href} target="_blank">

เราสามารถใช้ตัวเลือกใดตัวเลือกหนึ่งจากสามตัวเลือกเพื่อเปิดในแท็บใหม่


iPhone บางรุ่นไม่สนใจ "target = '_ blank'" ดูเหมือนว่าจะยังคงล้มเหลวสำหรับโทรศัพท์เหล่านั้น
Deborah

3
หมายเหตุเกี่ยวกับtarget='_blank': แนะนำให้เพิ่มแท็กrel='noopener noreferrer'ของคุณ<a>
Blundering Philosopher

19

คุณสามารถใช้ "{}" สำหรับเป้าหมายแล้ว jsx จะไม่ร้องไห้

<Link target={"_blank"} to="your-link">Your Link</Link>



6

ในกรณีของฉันฉันกำลังใช้ฟังก์ชันอื่น

ฟังก์ชัน

 function openTab() {
    window.open('https://play.google.com/store/apps/details?id=com.drishya');
  }

  <Link onClick={openTab}></Link>

4

วิธีง่ายๆคือการใช้คุณสมบัติ 'ถึง':

<Link to="chart" target="_blank" to="http://link2external.page.com" >Test</Link>


2

หากต้องการเปิด url ในแท็บใหม่คุณสามารถใช้แท็ก Link ดังต่อไปนี้:

<Link to="/yourRoute" target="_blank">
    Open YourRoute in a new tab
</Link>

โปรดทราบว่า<Link>องค์ประกอบได้รับการแปลเป็น<a>องค์ประกอบและตามเอกสารreact-router-domคุณสามารถส่งผ่านอุปกรณ์ประกอบฉากที่คุณต้องการให้เป็นเช่น title, id, className เป็นต้น


0

target = "_ blank" เพียงพอที่จะเปิดในแท็บใหม่เมื่อคุณใช้ react-router

เช่น <Link to={/admin/posts/error-post-list/${this.props.errorDate}} target="_blank"> View Details </Link>

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.