2017-08-28 13 views
2

私は3 spanを生成したいと思いますdiv反応を使用して、ここに私のコードです。ループ内のjsx反応中

export class Test extends React.Component<undefined, undefined> { 
    render() { 
    const list = ['test1', 'test2', 'test3']; 
    const body = (
     list.map(s => { 
     <span>s</span> 
     }) 
    ) 
    return (
     <div> 
     {body} 
     </div> 
    ) 
    } 
} 

ただし、動作しませんでした。内部にタグがありませんdivが生成されました、なぜですか?ここに何か悪いことはありますか?

答えて

5

{}を使用している場合、通常のJS構文を示していますが、この場合はJSX構文を使用しようとしていますので、()にラップするか、この暗黙のリターンで無視してください。

export class Test extends React.Component<undefined, undefined> { 
    render() { 
    const list = ['test1', 'test2', 'test3']; 
    const body = (
     list.map(s => 
     <span key={s}>s</span> 
    ) 
    ) 
    return (
     <div> 
     {body} 
     </div> 
    ) 
    } 
} 
+2

それはクリーンだと私はあなたの答えに投票していますが、その理由を説明すべきです'{} 'を削除すると、' return'の必要がなくなります。 –

+0

申し訳ありません。 @Seareneをjsxとes6との組み合わせで 'map'についてもっと読んでみたいのであれば、役に立つチュートリアルやドキュメントがたくさんあります。また、ここのように 'map'の中にあなたのタグに' key 'を与える​​べきであることを忘れてしまいました:https://facebook.github.io/react/docs/jsx-in-depth.html#javascript-expressions -子供として – Nocebo

4

値を返す必要があります。これは動作するはずです:

export class Test extends React.Component<undefined, undefined> { 
     render() { 
     const list = ['test1', 'test2', 'test3']; 
     const body = list.map(s => { 
      return <span>s</span> 
      }) 
     return (
      <div> 
      {body} 
      </div> 
     ) 
     } 
    } 
1
import React,{ Component } from 'react'; 
export class Test extends Component { 

    renderRows(){ 
     const lists = ['test1', 'test2', 'test3']; 
     lists.map(list=>{ 
      return (
       <span key={list}>{list}</span> 
      ); 
     }) 
    } 

    render() { 
     return (
      <div> 
       {this.renderRows()} 
      </div> 
     ); 
    } 
} 
2

あなたはES6の矢印の機能で、マップ・メソッドのコールバック関数のために、「簡潔な体」または通常「ブロック体」を使用することができます。

簡潔な本体では、式だけが必要であり、暗黙的な戻り値が付けられます。ブロック本体では、明示的なreturn文を使用する必要があります。

簡潔なボディ

export class Test extends React.Component<undefined, undefined> { 
    render() { 
    const list = ['test1', 'test2', 'test3']; 
    const body = (
     list.map(s => 
     <span key={s}>s</span> 
    ) 
    ) 
    return (
     <div> 
     {body} 
     </div> 
    ) 
    } 
} 

ブロック本体:詳細については

export class Test extends React.Component<undefined, undefined> { 
    render() { 
    const list = ['test1', 'test2', 'test3']; 
    const body = (
     list.map((s) => 
     {return <span key={s}>s</span>} 
    ) 
    ) 
    return (
     <div> 
     {body} 
     </div> 
    ) 
    } 
} 

そのページを参照してください。https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions

関連する問題