SVG → React

SVG เป็นคอมโพเนนต์ React

ได้ JSX พร้อมวางจากไฟล์ SVG ใดก็ได้ — แอตทริบิวต์ถูกเปลี่ยนชื่อตามที่ React ต้องการ กระจาย props ลงบนอิลิเมนต์ราก และมี TypeScript ให้ถ้าคุณต้องใช้

SVG → React

☞ ทำงานในเบราว์เซอร์ของคุณทั้งหมด — ไม่มีการอัปโหลดไฟล์

วางไฟล์ SVG ที่นี่

หรือคลิกเพื่อเลือก — เฉพาะ SVG

ไอคอนในรูปของคอมโพเนนต์

ทำไมจึงวาง SVG ลงใน JSX ตรง ๆ ไม่ได้

JSX ดูเหมือนมาร์กอัป แต่จริง ๆ แล้วมันคือ JavaScript แอตทริบิวต์ที่มีขีดกลางอย่าง stroke-width ไม่ใช่ตัวระบุที่ถูกต้อง คำว่า class ชนกับคำสงวน และวงเล็บปีกกาในสไตล์แบบอินไลน์จะถูกอ่านเป็นนิพจน์ SVG ที่คัดลอกตรงมาจากโปรแกรมออกแบบจึงมักคอมไพล์ไม่ผ่านด้วยเหตุผลอย่างน้อยหนึ่งข้อ

ตัวแปลงนี้เปลี่ยนชื่อเฉพาะสิ่งที่จำเป็นต้องเปลี่ยน และปล่อยส่วนที่เหลือไว้อย่างเดิม แอตทริบิวต์ data- และ aria- ยังคงขีดกลางไว้ เพราะ React ส่งต่อมันไปโดยไม่แตะต้อง — การไปเปลี่ยนชื่อพวกนี้เป็นสาเหตุยอดฮิตที่ทำให้ป้ายกำกับด้านการเข้าถึงหายไปเงียบ ๆ

สามขั้นตอน

วิธีแปลง SVG เป็นคอมโพเนนต์ React

01

วางไฟล์ SVG

เลือกไฟล์ .svg — ไฟล์ยังอยู่ในอุปกรณ์ของคุณ

02

คัดลอกบล็อกที่ต้องการ

คอมโพเนนต์เต็ม เวอร์ชัน TypeScript หรือ JSX ล้วน ๆ

03

วางลงในโปรเจกต์

import เหมือนคอมโพเนนต์อื่น แล้วจัดสไตล์ผ่าน props

ตอบสั้น ๆ

คำถามที่พบบ่อยเรื่อง SVG เป็น React

ทำไม {...props} ถึงอยู่ท้ายแท็ก svg

เพื่อให้สิ่งที่คุณส่งเข้ามาเป็นฝ่ายชนะ ใน JSX แอตทริบิวต์ที่เขียนทีหลังจะทับตัวก่อนหน้า ดังนั้นเมื่อวาง spread ไว้ท้ายสุด คุณจึงกำหนด className, width หรือ onClick จากภายนอกได้ ถ้าเอาไว้ข้างหน้า ค่าที่ฝังอยู่ในไฟล์จะกลับไปทับค่าของคุณอย่างเงียบ ๆ

จะเปลี่ยนสีไอคอนอย่างไร

แทนค่า fill หรือ stroke ที่เขียนตายตัวในผลลัพธ์ด้วย currentColor แล้วกำหนดสีผ่าน CSS ที่อิลิเมนต์แม่ตัวใดก็ได้ ถ้าไฟล์มีสีกระจายอยู่หลายโหนด ให้ส่งผ่านตัวเปลี่ยนสี SVG ก่อน — มันเปลี่ยนทุกสีเป็น currentColor ได้ในครั้งเดียว

ใช้กับ React Native ได้ไหม

ไม่ได้โดยตรง React Native ไม่มี DOM การใช้ SVG ที่นั่นต้องอาศัย react-native-svg และชื่ออิลิเมนต์ที่ขึ้นต้นด้วยตัวใหญ่อย่าง Svg และ Path แนวคิดการเปลี่ยนชื่อแอตทริบิวต์ที่แสดงตรงนี้ยังถูกต้อง แต่ส่วน import และแท็กจะต่างออกไป

ผลลัพธ์ออกมาเป็นบรรทัดยาวมากบรรทัดเดียว

นั่นคือหน้าตาของไฟล์ต้นฉบับ — SVG ที่ถูกย่อขนาดไว้ก็ยังคงย่ออยู่ เพราะการจัดรูปแบบใหม่เป็นงานคนละส่วน ให้ส่งผ่านตัวจัดรูปแบบ SVG ก่อน แล้วคอมโพเนนต์จะออกมาพร้อมการเยื้องบรรทัดที่อ่านง่าย

ไฟล์ของฉันถูกอัปโหลดไหม

ไม่ การแปลงเป็นเพียงงานจัดการสตริงธรรมดาที่ทำในเบราว์เซอร์ของคุณ