2016-12-05 2 views
0

Что не так с кодом ниже, он всегда регистрирует 1. Он получает номер в реквизитах, и я просто хочу, чтобы он многократно возвращал список ссылок.React Component Не работает как ожидалось

import React from 'react'; 

const itemWidget = (props) => { 

    let numItems = props.numItems; 
    let itemList = itemMarkup(numItems); 

    return (
    <div> 

    { itemList } 

    </div>); 
}; 

export default itemWidget; 

const itemMarkup = (n) => { 

    for (let i=1; i <= n ; i++) { 
    console.log(i); 
    return (
     <a href="#">{i}</a> 
    ); 
    } 
} 

Ниже приведен код, входящий в число родительского компонента.

import React from 'react'; 
import itemWidget from '~/Components/itemWidget'; 

export default class Merchandise extends React.Component { 
    constructor() { 
    super(); 
    } 

    render() { 
    return (
    <div> 
     <div className="merch-items"> 
     <ItemsWidget numItems={10}/> 
     </div> 
    </div> 
    ); 
    } 
} 
+1

Что такое 'n', когда он прошел в? Является ли он протоколированием 1 несколько раз или один раз? –

+0

Как вы ссылаетесь на этот компонент? Можете ли вы предоставить код, в котором вам присваивается значение prop numItems? – Pineda

+0

Я добавил код выше для родительского компонента. – sayayin

ответ

0

возвращение заявление в для цикла вызывает цикл ломаться.

Используйте следующие

import React from 'react'; 
const itemWidget = (props) => { 

    let numItems = props.numItems; 
    let itemList = itemMarkup(numItems); 

    return (
    <div> 

    { itemList } 

    </div>); 
}; 
const itemMarkup = (n) => { 
    let itemList = []; 
    for (let i=1; i <= n ; i++) { 
    itemList.push (
     <a href="#">{i}</a> 
    ); 
    } 

    return itemList 
} 
+0

Не могли бы вы объяснить свой ответ? –

+0

@SterlingArcher возвращает оператор в своем цикле for, из-за чего цикл прерывается. –

+0

В добавлении, что ответ пожалуйста :) Хороший ответ имеет хорошее объяснение, почему он исправляет вопрос, в противном случае это свалка кода. –

0
const itemMarkup = (n) => { 
    let rows = [] 
    for (let i=1; i <= n ; i++) { 
     console.log(i); 
     rows.push(<a href="#">{i}</a>); 
    // return (
    // <a href="#">{i}</a> 
    //); 
    } 

    return rows; 
}; 

возвращают массив ссылок

+0

да, но я не хочу массив, я просто хочу зациклиться на несколько раз, чтобы сгенерировать некоторые ссылки. – sayayin

+0

, и я, вероятно, могу работать с этим, создать массив, а затем использовать карту для создания html, но я хочу знать, почему это так, что то, что у меня есть, не работает. – sayayin

+0

, потому что функция itemMarkup стрелки только что вернулась, она прерывает цикл for. Так что только первый элемент вы можете получить. – Jacob

Смежные вопросы