React Native'de bir <Text> bileşenine nasıl satır sonu ekleyebilirim?


336

React Native'deki bir Metin bileşenine yeni bir satır (\ r \ n, <br /> gibi) eklemek istiyorum.

Sahip olursam:

<text><br />
Hi~<br >
this is a test message.<br />
</text>

Ardından, Yerel Oluşturmaları Yanıtla Hi~ this is a test message.

Metni şu şekilde yeni bir satır eklemek mümkün müdür:

Hi~
this is a test message.

\nÇizgiyi kırmak istediğiniz yeri kullanabilirsiniz .
— Sam009

Yanıtlar:


654

Bunu yapmalı:

<Text>
Hi~{"\n"}
this is a test message.
</Text>

21
Ben kullanabilirsiniz böylece değişken dize ile bunu yapmanın bir yolu var mı <Text>{content}</Text>?
— Roman Sklenar

2
\ n bir satır sonu
— Chris Ghenea

8
Bunun için teşekkürler. Hızlı erişim için satır sonu bileşeni yaptım var Br = React.createClass({ render() { return ( <Text> {"\n"}{"\n"} </Text> ) } })
— Jonathan Lockley

4
Metin bir dize değişkenindeyse ne olur? Orada mantığı <Text>{comments}</Text>kullanamayız {\n}. Öyleyse nasıl?
— user2078023

2
Metin bir pervaneden geliyorsa, bu şekilde <Component text={"Line1\nLine2"} /><Component text="Line1\nLine2" />
— ilettiğinizden

91

Ayrıca şunları da yapabilirsiniz:

<Text>{`
Hi~
this is a test message.
`}</Text>

Bence daha kolay, çünkü dizeye bir şeyler eklemek zorunda değilsiniz; sadece bir kez sarın ve tüm satır sonlarınızı tutar.


7
bu şimdiye kadarki en temiz çözümwhite-space: pre-line;
— Tomasz Mularczyk

3
@Tomasz: Sanırım beyaz boşluk veya whiteSpace yok:
— suther

1
Şablon değişmez değerleri temiz ve düzenli, kabul edilen cevaba
— kıyasla

Sanırım beyaz boşluk stilinin boşlukları kaldırması gerekiyor, değil mi? Evetse, umutsuzca ihtiyacım var, aksi takdirde dize değişmezleri süper çirkinleşiyor ...
— Xerus

@Xerus Girintiyi kaldırmak için burada görüldüğü gibi bir metin son işlemcisi kullanabilirsiniz: gist.github.com/Venryx/84cce3413b1f7ae75b3140dd128f944c
— Venryx 5:19

34

kullanın:

<Text>{`Hi,\nCurtis!`}</Text>

Sonuç:

Selam,

Curtis!


2
İleti bir dize değişkeni olduğunda bu çalışmıyor gibi görünüyor: <Text> {message} </Text>
— user2078023

Bunun gibi bir işlev kullanabilirsiniz: splitLine = message => {...} ve içinde RegExp, sonra <Text> {this.splitLine (message)} </Text>
— COdek

13

Bu benim için çalıştı

<Text>{`Hi~\nthis is a test message.`}</Text>

(tepkimeye özgü 0.41.0)


12

Durum değişkenlerinden hiç veri görüntülüyorsanız, bunu kullanın.

<Text>{this.state.user.bio.replace('<br/>', '\n')}</Text>


4

Daha da iyisi: kullanırsanız styled-components, böyle bir şey yapabilirsiniz:

import React, { Component } from 'react';
import styled from 'styled-components';

const Text = styled.Text`
  text-align: left;
  font-size: 20px;
`;

export default class extends Component {

 (...)

 render(){
  return (
    <View>
      <Text>{`
        1. line 1
        2. line 2
        3. line 3
      `}</Text>
    </View>
  );
 }

}

1
Bunun, stilize edilmiş bileşenlerle ilgisi yoktur ve bunları kullansanız da kullanmasanız da çalışır.
— Kuba Jagoda


2

Kodumu güzel girintili tutmak için üçlü bir operatörde dallanan tek satırlık bir çözüme ihtiyacım vardı.

{foo ? `First line of text\nSecond line of text` : `Single line of text`}

Yüce sözdizimi vurgulama, satır sonu karakterinin vurgulanmasına yardımcı olur:

Yüce sözdizimi vurgulama


1

`` Bunu şöyle kullanabilirsiniz:

<Text>{`Hi~
this is a test message.`}</Text>

1

Bunu aşağıdaki gibi yapabilirsiniz:

{'Hesabınız \ nHesabınız'}


Burada da işe yaradı <Header headerText = {'Muhammad \ n Tayyab \ n Rana'} subHeadline = "Web Geliştiricisi ve Tasarımcısı" />
— muhammad tayyab

1

Ayrıca, render yönteminizde sabit olarak da ekleyebilirsiniz, böylece yeniden kullanımı kolaydır:

  render() {
    const br = `\n`;
     return (
        <Text>Capital Street{br}Cambridge{br}CB11 5XE{br}United Kingdom</Text>
     )  
  }

1

Sadece {'\n'}Metin etiketi içine koyun

<Text>

   Hello {'\n'}

   World!

</Text>

1

En temiz ve en esnek yollardan biri Şablon Değişmezlerini kullanmak olacaktır .

Bunu kullanmanın bir avantajı, metin gövdesinde dize değişkeninin içeriğini görüntülemek istiyorsanız, daha temiz ve basittir.

(Lütfen backtick karakterlerinin kullanımına dikkat edin)

const customMessage = 'This is a test message';
<Text>
{`
  Hi~
  ${customMessage}
`}
</Text>

İle sonuçlanır

Hi~
This is a test message

0

Herkes bir dizideki her dize için yeni bir satır olmasını istediğiniz bir çözüm arıyorsa, böyle bir şey yapabilirsiniz:

import * as React from 'react';
import { Text, View} from 'react-native';


export default class App extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      description: ['Line 1', 'Line 2', 'Line 3'],
    };
  }

  render() {
    // Separate each string with a new line
    let description = this.state.description.join('\n\n');

    let descriptionElement = (
      <Text>{description}</Text>
    );

    return (
      <View style={{marginTop: 50}}>
        {descriptionElement}
      </View>
    );
  }
}

Canlı bir örnek için atıştırmalıklara bakın: https://snack.expo.io/@cmacdonnacha/react-native-new-break-line-example



0

Bir <br>dizide tanımlanan metin satırları arasına eklemenin başka bir yolu :

import react, { Fragment } from 'react';

const lines = [
  'One line',
  'Another line',
];

const textContent =
  lines.reduce(items, line, index) => {
    if (index > 0) {
      items.push(<br key={'br-'+index}/>);
    }
    items.push(<Fragment key={'item-'+index}>{line}</Fragment>);
    return items;
  }, []);

Daha sonra metin değişken olarak kullanılabilir:

<Text>{textContent}</Text>

Mevcut değilse, Fragmentşu şekilde tanımlanabilir:

const Fragment = (props) => props.children;

0

https://stackoverflow.com/a/44845810/10480776 @Edison D'souza cevabı benim aradığım tam olarak buydu. Ancak, yalnızca dizenin ilk oluşumunu değiştiriyordu. Birden fazla <br/>etiketi işlemek için çözümüm şuydu :

<Typography style={{ whiteSpace: "pre-line" }}>
    {shortDescription.split("<br/>").join("\n")}
</Typography>

Üzgünüz, itibar puanı sınırlaması nedeniyle yazısına yorum yapamadım.


0

İşte TypeScript kullanarak React (React Native değil) için bir çözüm.

Aynı kavram Native React'e de uygulanabilir

import React from 'react';

type Props = {
  children: string;
  Wrapper?: any;
}

/**
 * Automatically break lines for text
 *
 * Avoids relying on <br /> for every line break
 *
 * @example
 * <Text>
 *   {`
 *     First line
 *
 *     Another line, which will respect line break
 *  `}
 * </Text>
 * @param props
 */
export const Text: React.FunctionComponent<Props> = (props) => {
  const { children, Wrapper = 'div' } = props;

  return (
    <Wrapper style={{ whiteSpace: 'pre-line' }}>
      {children}
    </Wrapper>
  );
};

export default Text;

Kullanımı:

<Text>
  {`
    This page uses server side rendering (SSR)

    Each page refresh (either SSR or CSR) queries the GraphQL API and displays products below:
  `}
</Text>

ekranlar: resim açıklamasını buraya girin


-3

Kullanım \nmetin ve css içindewhite-space: pre-wrap;


1
Ben göremediğiniz whiteSpaceYerli tepki olarak listelenen Metin Stili Prop . Bunun HTML olmadığını unutmayın.
— binki

referans için bu reaksiyon js'de çalışır. Diğerleri nedense benim için çalışmıyor.
— HimanshuArora9419
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.