React Nativeの<Text>コンポーネントに改行を挿入するにはどうすればよいですか?


335

React Nativeのテキストコンポーネントに新しい行(\ r \ n、<br />など)を挿入したい。

私が持っている場合:

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

次に、React Nativeレンダリング Hi~ this is a test message.

テキストをレンダリングして、次のように新しい行を追加することは可能ですか?

Hi~
this is a test message.

\n改行したいところに使用できます。
Sam009

回答:


652

これはそれを行うはずです:

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

20
変数からの文字列でそれを行う方法はあり<Text>{content}</Text>ますか?
ローマスクレナー

2
\ n改行です
Chris Ghenea 2016年

8
これをありがとう。簡単にアクセスできるように改行コンポーネントを作成してしまいました var Br = React.createClass({ render() { return ( <Text> {"\n"}{"\n"} </Text> ) } })
Jonathan Lockley

4
テキストが文字列変数にある場合はどうなりますか?そこで<Text>{comments}</Text>{\n}ロジックを使用できません。ではどうやって?
user2078023

2
:テキストは小道具から来る場合、あなたはこのようにそれを渡す作る<Component text={"Line1\nLine2"} />代わりに <Component text="Line1\nLine2" />(予告追加中括弧)
qwertzguy

91

あなたも行うことができます:

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

文字列内に何かを挿入する必要がないため、私の意見ではより簡単です。一度ラップするだけで、すべての改行が保持されます。


7
これは、これまでで最もクリーンなソリューションですwhite-space: pre-line;
Tomasz Mularczyk

3
@Tomasz:空白やwhiteSpaceがないと思います:-<Text> -Tagのスタイルシートは、react-nativeにありますか、それとも間違っていますか?
サザー

1
テンプレートのリテラルは、受け入れられた回答と比較してクリーンで端正です
Hemadri Dasari

ホワイトスペーススタイルは意図スペースを削除するためのものだと思いますよね?はいの場合、私は必死にそれを必要とします、そうでなければ、文字列リテラルは非常に醜くなります...
Xerus

@Xerus次のように、テキストポストプロセッサを使用してインデントを削除できます:gist.github.com/Venryx/84cce3413b1f7ae75b3140dd128f944c
Venryx

34

使用する:

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

結果:

こんにちは、

カーティス!


2
メッセージが文字列変数の場合、これは機能していないようです:<Text> {message} </ Text>
user2078023

次のような関数を使用できます。splitLine= message => {...}およびRegExp、次に<Text> {this.splitLine(message)} </ Text>
COdek

13

これは私のために働いた

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

(反応ネイティブ0.41.0)


12

状態変数のデータを表示する場合は、これを使用してください。

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


4

さらに良い方法:を使用するとstyled-components、次のようなことができます。

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>
  );
 }

}

これは、styled-componentsとは関係がなく、使用するかどうかに関係なく機能します。
クバジャゴダ


2

コードを適切にインデントするために、3項演算子で分岐する1行のソリューションが必要でした。

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

崇高な構文の強調表示は、改行文字の強調表示に役立ちます。

崇高な構文のハイライト


1

次のように ``を使用できます:

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

1

次のようにして行うことができます。

{'アカウントを作成\ nあなたのアカウント'}


ここでも同様に機能しました<Header headerText = {'Muhammad \ n Tayyab \ n Rana'} subHeadline = "Web Developer and Designer" />
muhammad tayyab

1

renderメソッドに定数として追加するだけで、簡単に再利用できます。

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


1

最もクリーンで柔軟な方法の1つは、テンプレートリテラルを使用することです。

これを使用する利点は、文字列変数の内容をテキスト本文に表示したい場合、より簡潔で簡単です。

(バックティック文字の使用に注意してください)

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

結果として

Hi~
This is a test message

0

誰かが配列の各文字列に新しい行を追加したいという解決策を探している場合は、次のようにすることができます。

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>
    );
  }
}

ライブの例については、スナックを参照してください:https : //snack.expo.io/@cmacdonnacha/react-native-new-break-line-example



0

<br>配列で定義されているテキスト行の間に挿入する別の方法:

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;
  }, []);

次に、テキストを変数として使用できます。

<Text>{textContent}</Text>

利用Fragmentできない場合は、次のように定義できます。

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

0

https://stackoverflow.com/a/44845810/10480776 @Edison D'souzaの答えは、まさに私が探していたものでした。ただし、それは文字列の最初の出現を置き換えるだけでした。これが複数の<br/>タグを処理するための私の解決策です:

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

申し訳ありませんが、評判スコアの制限により、彼の投稿にはコメントできませんでした。


0

TypeScriptを使用した(React Nativeではなく)Reactのソリューションを次に示します。

同じ概念をReact Nativeにも適用できます

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;

使用法:

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

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

ディスプレイ: ここに画像の説明を入力してください


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.