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.