Một cách nguy hiểmSetInnerHTML đối tượng đối tượng

Tìm hiểu cách sử dụng DangerlySetInnerHTML trong React, cùng với việc sử dụng nó với các thẻ script, không có thẻ div, các lựa chọn thay thế, v.v.

Một cách nguy hiểmSetInnerHTML đối tượng đối tượng

Chỉ để đề cập đến tất cả các tình huống sử dụng một cách nguy hiểmSetInnerHTML, hãy xem xét thêm hai ví dụ, một ví dụ sử dụng thẻ script và một không có phần tử div

ví dụ về thẻ script DangerlySetInnerHTML

export function exampleComponent() {
  const inlineScript = '(() => { console.log("Hello World!") })();'
  return (
    <script
      type="text/javascript"
      dangerouslySetInnerHTML={{ __html: inlineScript }}
    />
  )
}

Điều này bây giờ sẽ đăng nhập “Xin chào thế giới. ” bất cứ khi nào thẻ tập lệnh này được chạy

example of how to use dangerouslySetInnerHTML in React with a script tag

một cách nguy hiểmSetInnerHTML không có div ví dụ

export function exampleComponent() {
  const htmlString =
    "This is some HTML being set as a paragraph"
  return (
    <div>
      <h1> Hello World </h1>
      <p dangerouslySetInnerHTML={{ __html: htmlString }} />
    </div>
  )
}

Điều này bây giờ sẽ in đậm từ “HTML” bởi vì chúng tôi đang đặt HTML bên trong của phần tử p với chuỗi của chúng tôi với từ “HTML” được bao bọc trong một phần tử mạnh

example of how to use dangerouslySetInnerHTML in React without a div

Kết xuất HTML mà không cần nguy hiểmSetInnerHTML trong React

Để xem nhanh cách bạn có thể hiển thị HTML trong React mà không cần sử dụng DangerlySetInnerHTML, điều quan trọng là phải nhớ mục đích của React và cách sử dụng JSX

Khi sử dụng React, bất kỳ JSX nào bạn sử dụng sẽ được trả về và hiển thị dưới dạng HTML và do đó, nếu bạn muốn hiển thị HTML mà không có DangerlySetInnerHTML, bạn có thể và nên thực hiện điều đó trong JSX

Chỉ nên sử dụng một cách nguy hiểmSetInnerHTML khi bạn không có lựa chọn nào khác ngoài việc sử dụng nó. Nếu bạn có thể sử dụng JSX để xác định và hiển thị các phần tử HTML của mình thì bạn nên

Tại sao không có lựa chọn thay thế React nguy hiểmSetInnerHTML

Vấn đề tìm kiếm các lựa chọn thay thế chủ yếu đến từ việc đặt tên cho chỗ dựa này là dangerouslySetInnerHTML

Nghe có vẻ đáng lo ngại vì bạn biết mình đang làm điều gì đó nguy hiểm vì cái tên, nhưng thực ra nó không nguy hiểm như bạn cảm thấy hoặc nghe

Việc đặt tên cho DangerlySetInnerHTML là có chủ ý để cẩn thận khi sử dụng nó

Lý do tại sao dangerouslySetInnerHTML được gọi như vậy là vì một trong những mục đích sử dụng chính của chỗ dựa này là đặt HTML mà bạn nhận được từ một API và do đó bạn không có quyền kiểm soát

Điều này có nghĩa là nếu bạn đặt HTML từ một nguồn gốc khác, họ có thể gửi cho bạn HTML độc hại mà sau đó bạn sẽ đặt và chạy trong ứng dụng của mình, ứng dụng này có thể chạy JavaScript không xác định và hơn thế nữa, đó là một vấn đề

Tuy nhiên, nếu bạn tự tin rằng HTML này an toàn hoặc nếu HTML do bạn tự viết thì nó không thực sự nguy hiểm miễn là nó là HTML hợp lệ

Vì vậy, bạn có thể coi đó là một lời nhắc nhở để đảm bảo rằng bạn cẩn thận với nguồn của HTML khi sử dụng DangerlySetInnerHTML

Ngoài ra, có một giải pháp thay thế cho việc sử dụng DangerlySetInnerHTML, đó là chỉ đặt InternalHTML của một phần tử bằng cách sử dụng vanilla JS thay thế

Ví dụ thay thế Vanilla JavaScript

document.getElementsByTagName(‘p’)[0].innerHTML = "This is some HTML being set as a paragraph"

Tuy nhiên, việc đặt InternalHTML bằng cách sử dụng JavaScript vanilla như thế này không phải là lý tưởng trong ứng dụng React vì bằng cách đặt DangerlySetInnerHTML, bạn đang thông báo cho React không ghi đè lên HTML này trong bất kỳ bước chỉnh sửa hoặc kết xuất lại nào, điều này rất quan trọng nếu không bạn có thể mất html

Tóm lược

Ở đó chúng ta có cách sử dụng DangerlySetInnerHTML trong React, nếu bạn muốn nhiều hơn như thế này, hãy nhớ xem một số bài đăng khác của tôi

Tôi hy vọng bài đăng này đã giúp ích cho bạn, nhưng trước khi tiếp tục, hãy đảm bảo bạn đã thử bài kiểm tra tương tác thú vị của tôi để xem bạn là kỹ sư React mới vào nghề, trung cấp hay chuyên gia

Sẽ chỉ mất khoảng 1 - 3 phút, vì vậy bạn không có gì để mất, hãy kiểm tra khả năng của mình ngay bây giờ

làm bài kiểm tra

Bạn là kỹ sư phản ứng mới, trung cấp hay chuyên gia?

Tìm hiểu tại đây bằng cách làm bài kiểm tra nhanh, tương tác, vui nhộn của tôi, mất khoảng 1 - 3 phút. Bạn sẽ làm tốt đến mức nào?

làm bài kiểm tra

Một số đồ họa được sử dụng trong bài đăng này được tạo bằng các biểu tượng từ biểu tượng phẳng

Blog / Phản ứng

React Fragment - Mọi thứ bạn cần biết

React Fragment - Everything you need to know

Bài đăng này sẽ bao gồm mọi thứ bạn cần biết về React Fragment một cách rõ ràng và ngắn gọn và sẽ là nguồn tài nguyên cuối cùng cho bất kỳ truy vấn nào liên quan đến React Fragment

Will MaygerWill Mayger

Ngày 24 tháng 3 năm 2022

Mạo từ

Blog / Javascript

Cách đợi tất cả các lời hứa giải quyết trong JavaScript

How to wait for all promises to resolve in JavaScript

Bài đăng này sẽ đề cập đến cách đợi tất cả các lời hứa giải quyết trong JavaScript thay vì phải thực hiện từng lời hứa khi bạn có nhiều lời hứa cần giải quyết

Will MaygerWill Mayger

21 Tháng Ba, 2022

Mạo từ

Blog / Phản ứng

Mọi thứ bạn cần biết về React Keys

Everything you need to know about React Keys

Trong hướng dẫn này, bạn sẽ khám phá mọi thứ bạn cần biết về React Keys để có thể sử dụng chúng đúng cách trong bất kỳ ứng dụng React nào cùng với thông tin chi tiết

Will MaygerWill Mayger

03 Tháng Ba, 2022

Mạo từ

Blog / Phản ứng

Phản ứng. Mảnh so với div

React.Fragment vs div

Trong bài đăng này, chúng tôi đề cập đến sự khác biệt giữa, React. Phân đoạn so với div, lợi ích của một phân đoạn và khi nào bạn nên sử dụng cái này hơn cái kia

Tại sao bạn không nên sử dụng một cách nguy hiểmSetInnerHTML?

Do tính dễ bị tấn công của tập lệnh chéo trang (XSS) , DangerlySetInnerHTML có thể tạo thành mối đe dọa lớn đối với ứng dụng của bạn, như tên cho thấy.

Tôi có thể sử dụng cái gì thay vì một cách nguy hiểmSetInnerHTML?

Tuy nhiên, nếu ứng dụng hoặc trang web chấp nhận dữ liệu đầu vào của nhiều người dùng, bạn nên quan tâm. Tuy nhiên, ngoài điều đó ra, có một giải pháp thay thế cho việc sử dụng DangerlySetInnerHTML, chỉ cần thiết lập InternalHTML của phần tử HTML React bằng vanilla JS để thay thế.

Làm thế nào để sử dụng HTML một cách nguy hiểm?

dangerouslySetInnerHTML là thuộc tính mà bạn có thể sử dụng trên các phần tử HTML trong ứng dụng React để thiết lập nội dung của chúng theo chương trình. Thay vì sử dụng bộ chọn để lấy phần tử HTML, sau đó đặt internalHTML của nó, bạn có thể sử dụng thuộc tính này trực tiếp trên phần tử .

Thuộc tính nào là sự thay thế của React để sử dụng InternalHTML trong DOM của trình duyệt?

Thuộc tính nguy hiểmSetInnerHTML là sự thay thế của React để sử dụng InternalHTML trong DOM của trình duyệt. Cũng giống như innerHTML , sẽ rất rủi ro khi sử dụng thuộc tính này khi xem xét các cuộc tấn công cross-site scripting (XSS)