Phương pháp hay nhất khi thêm khoảng trắng trong JSX


91

Tôi hiểu cách (và tại sao ) thêm khoảng trắng trong JSX, nhưng tôi đang băn khoăn không biết phương pháp hay nhất nào tạo ra sự khác biệt thực sự?

Gói cả hai yếu tố trong một khoảng

<div className="top-element-formatting">
  <span>Hello </span>
  <span className="second-word-formatting">World!</span>
</div>

Thêm chúng trên một dòng

  <div className="top-element-formatting">
    Hello <span className="second-word-formatting">World!</span>
  </div>

Thêm không gian với JS

<div className="top-element-formatting">
    Hello {" "}
    <span className="second-word-formatting">World!</span>
</div>

1
Bạn không cần thêm khoảng thời gian, React đã khắc phục các vấn đề tồn tại lâu dài với các nút văn bản và ví dụ thứ hai của bạn là tốt
Dominic

1
Tôi không biết rằng có một "phương pháp hay nhất" được xác định - chắc chắn bạn không cần phải bọc mọi thứ trong <span>các thẻ, nhưng tôi thường chỉ tuân theo các phương pháp HTML chung khi lo lắng về khoảng trắng.
arthurakay

Câu trả lời:


104

Bởi vì &nbspnguyên nhân của bạn có những khoảng trống không bị phá vỡ, bạn chỉ nên sử dụng nó ở những nơi cần thiết. Trong hầu hết các trường hợp, điều này sẽ có tác dụng phụ ngoài ý muốn.

Các phiên bản React cũ hơn, tôi tin rằng tất cả những phiên bản trước v14, sẽ tự động chèn <span> </span>khi bạn có dòng mới bên trong thẻ.

Mặc dù họ không còn làm điều này nữa, nhưng đó là một cách an toàn để xử lý điều này trong mã của riêng bạn. Trừ khi bạn có kiểu dáng nhắm mục tiêu cụ thể span(thông lệ nói chung), thì đây là cách an toàn nhất.

Theo ví dụ của bạn, bạn có thể đặt chúng trên một dòng cùng nhau vì nó khá ngắn. Trong các trường hợp dòng dài hơn, đây là cách bạn có thể nên làm:

  <div className="top-element-formatting">
    Hello <span className="second-word-formatting">World!</span>
    <span> </span>
    So much more text in this box that it really needs to be on another line.
  </div>

Phương pháp này cũng an toàn trước trình soạn thảo văn bản tự động cắt xén.

Phương pháp khác đang sử dụng {' '}không chèn các thẻ HTML ngẫu nhiên. Điều này có thể hữu ích hơn khi tạo kiểu, làm nổi bật các phần tử và loại bỏ sự lộn xộn khỏi DOM. Nếu bạn không cần khả năng tương thích ngược với React v14 hoặc phiên bản cũ hơn, thì đây sẽ là phương pháp ưu tiên của bạn.

  <div className="top-element-formatting">
    Hello <span className="second-word-formatting">World!</span>
    {' '}
    So much more text in this box that it really needs to be on another line.
  </div>

10

Bạn có thể sử dụng thuộc tính css white-space và đặt nó thành pre-wrap thành phần tử div bao quanh.

div {
     white-space: pre-wrap;
}

Nếu thùng chứa bị uốn cong, thì bạn sẽ cần giải pháp này.
Curtis

Đây là trang duy nhất không & nbsp; giải pháp đã làm việc cho tôi!
Magnus

@Magnus Bạn được chào đón, người đàn ông của tôi. Không có giải pháp nào cho câu trả lời này thực sự hiệu quả cho trường hợp đặc biệt của tôi.
i_code

10

Bạn có thể thêm khoảng trắng đơn giản với dấu ngoặc kép: {" "}

Ngoài ra, bạn có thể sử dụng các ký tự mẫu , cho phép chèn, các biểu thức nhúng (mã bên trong dấu ngoặc nhọn):

`${2 * a + b}.?!=-` // Notice this sign " ` ",its not normal quotes.

Trong phiên bản React nào, điều này phù hợp với bạn? 15.6.2 dường như bỏ qua điều này.
smhg

1
@smhg yo. nó không phụ thuộc vào phiên bản của phản ứng. feautere của ecmascript, sắp chữ. Bạn có thể nhập mẫu của mình vào bảng điều khiển Chrome để kiểm tra xem temlate của bạn có ổn không. Vấn đề cũng có thể nằm trong cài đặt babel của bạn.
Vasyl Gutnyk

1
Bạn đang nhầm lẫn giữa các ký tự mẫu với các biểu thức JSX. Để thêm khoảng trắng qua JSX, chỉ cần đặt một chuỗi bao gồm một ký tự khoảng trắng trong biểu thức JSX . Cách đơn giản nhất để làm điều đó là {' '}. Bạn không cần các ký tự mẫu cho điều đó, mặc dù chúng hoạt động (và như vậy {" "}).
Dan Dascalescu

bạn, nó có một chút lỗi đánh máy khó hiểu - đã sửa lại. Dù sao, tôi chắc chắn, 99,9% người dân ở đây đang tìm kiếm mẫu literals :)
Vasyl Gutnyk

6

Tôi có xu hướng sử dụng &nbsp;

Nó không đẹp nhưng đó là cách ít khó hiểu nhất để thêm khoảng trắng mà tôi đã tìm thấy và nó cho tôi quyền kiểm soát tuyệt đối về lượng khoảng trắng mà tôi thêm vào.

Nếu tôi muốn thêm 5 dấu cách:

Hello&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span className="second-word-formatting">World!</span>

Thật dễ dàng để xác định chính xác những gì tôi đang cố gắng thực hiện ở đây khi tôi quay lại mã vài tuần sau đó.


6
Tôi không thể tưởng tượng trong thực tế, việc sử dụng 5 khoảng trắng không ngắt mà có ý nghĩa về mặt đánh máy là gì, nhưng ngoài trường hợp như vậy, việc sử dụng trong thực tế là sai. Nếu bạn đang sử dụng điều này cho bố cục, bạn nên sử dụng CSS thay thế và nếu bạn cần thêm một khoảng trắng nhưng không yêu cầu nó không bị phá vỡ, thì có rất nhiều khoảng trống khác tạo cảm giác typographic hơn. Ví dụ: xem câu hỏi này: stackoverflow.com/questions/8515365/…
guioconnor

1
@guioconnor hãy thử mở rộng trí tưởng tượng của bạn và nghĩ về một ứng dụng soạn thảo, ví dụ như vscode và bạn sẽ thấy rằng nó hoàn toàn có ý nghĩa về mặt đánh máy: D.
Dan

5

Bạn không cần phải chèn &nbsp;hoặc bọc thêm không gian của mình <span/>. Chỉ cần sử dụng mã thực thể HTML cho không gian -&#32;

Chèn không gian thông thường dưới dạng HTML-entity

<form>
  <div>Full name:</span>&#32;
  <span>{this.props.fullName}</span>
</form>

Lưu ý bên lề: hôm nay tôi gặp điều này vì đẹp hơn là phá mã của tôi bằng cách định dạng thực thể không gian. Khi bạn sử dụng {""}, nó tự hoạt động trên một dòng và sẽ không bị vỡ.
gorhawk

Tôi chỉ đến để thêm điều này vào câu trả lời của riêng tôi. Thay vào đó, tôi đã ủng hộ bạn.
không xác định

5

Tôi đã cố gắng nghĩ ra một quy ước tốt để sử dụng khi đặt văn bản bên cạnh các thành phần trên các dòng khác nhau và đã tìm thấy một số tùy chọn tốt:

<p>
    Hello {
        <span>World</span>
    }!
</p>

hoặc là

<p>
    Hello {}
    <span>World</span>
    {} again!
</p>

Mỗi thứ trong số này tạo ra html sạch mà không có &nbsp;đánh dấu bổ sung hoặc không liên quan khác. Nó tạo ra ít nút văn bản hơn so với việc sử dụng {' '}và cho phép sử dụng các thực thể html nếu {' hello &amp; goodbye '}không.


3

Bạn có thể sử dụng dấu ngoặc nhọn như biểu thức với cả dấu ngoặc kép và dấu ngoặc đơn cho khoảng trắng, tức là,

{" "} or {' '}

Bạn cũng có thể sử dụng các ký tự mẫu ES6, tức là,

`   <li></li>` or `  ${value}`

Bạn cũng có thể sử dụng & nbsp như bên dưới (bên trong span)

<span>sample text &nbsp; </span>

Bạn cũng có thể sử dụng & nbsp trong nguy hiểmSetInnerHTML khi in nội dung html

<div dangerouslySetInnerHTML={{__html: 'sample html text: &nbsp;'}} />

2

sử dụng {} hoặc {``} hoặc&nbsp; để tạo khoảng cách giữa phần tử span và nội dung.

<b> {notif.name} </b> <span id="value"> &nbsp;{ notif.count }{``} </span>

1
nbsp = Non-Breakable Space, là ký tự unicode khác với khoảng trắng thông thường và hạn chế ngắt dòng. Đôi khi điều đó mong muốn, chỉ cần chỉ ra nó không tương đương với các tùy chọn khác.
Beni Cherniavsky-Paskin

1

Nếu mục tiêu là tách hai phần tử, bạn có thể sử dụng CSS như dưới đây:

A<span style={{paddingLeft: '20px'}}>B</span>
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.