2017-01-24 4 views
0

Я пытаюсь вырваться из цикла, как только я нашел то, что искал, в данном случае цитату.Завершить цикл карты в ответном нативном

Я знаю из-за использования таких вещей, как Java, что на самом деле возможно, однако это оказывается более сложным, чем я думал в RN. Когда я использую разрыв JS, он просто говорит о своей синтаксической ошибке, есть ли в RN break операторов?

enter image description here

quotes.quotesArray.map((quote, i) => { 
    if(!quote.isRead){ 
     return <Text key={i} style={styles.container, styles.quote}>{quotes.quotesArray[i].quotation}</Text>;      
     break; 
    } else { 
     return 
    } 
}) 
+0

'break' не в' доклада доступен цикла map', для этого случая использовать 'для ' – jose920405

ответ

2

Нельзя досрочно разорвать Array.prototype.map. Похоже, вы хотите отобразить первый элемент, соответствующий предикату !quote.isRead. Если это так, вы можете использовать Array.prototype.find, чтобы найти первую непрочитанную цитату, а затем визуализировать ее, если она существует.

var unreadQuote = quotes.quotesArray.find(quote => !quote.isRead) 
render() { 
    return (
    unreadQuote && 
    <Text style={styles.container, styles.quote}>{unreadQuote.quotation}</Text>; 
) 
} 
+0

Mercuy Это говорит о том, что перерыв - это «Unsyntactic Break» - означает ли это, что есть заявление о нарушении, которое будет работать в React Native? Любопытно – user2026178

+1

Оператор 'break' в React Native идентичен оператору' break', который используется в браузерах. Он следует тем же правилам. Это означает, что они используются, например, в циклах 'while' и' for' и 'switch'. –

0

Проблема заключается в том, что вы возвращение начинается следующий цикл так, он никогда не попадает в break, вот еще один способ, которым Вы могли бы установить это. Отредактировано для цикла loop из forEach для разрыва, чтобы быть действительным.

const quote = []; 
for (let i = 0; i < quotes.quotesArray.length; i++) { 
    if (!quote.isRead[i]) { 
    quote.push(<Text key={i} style={styles.container, styles.quote}>{quotes.quotesArray[i]}</Text>); 
    break; 
    } 
} 

Вы также можете использовать метод lodash в .find() для фильтрации массива и возвращает первый элемент, который возвращает истину в вашей функции обратного вызова и использовать эти данные для элемента текста.

+2

' break; 'не может использоваться в этом месте. – zerkms

+0

@zerkms yeah полностью забыл, что вы не можете пробить outta forEach, его нужно будет настроить как обычный «цикл» для перерыва на работу –

1

Я хотел бы сделать это с фильтром и карты и переместить визуализации компонента функции:

renderQuote(quote, i) { 
    return (
     <Text key={i} style={styles.container, styles.quote}> 
      {quote.quotation} 
     </Text> 
    ); 
} 

// On JSX 

{ quotes.quotesArray.filter((quote) => !quote.isRead).map((quote, i) => this.renderQuote(quote, i) } 
Смежные вопросы