[英]Loop <Text> through array and display it side by side in react native
我有一個數組,其中填充了 object 包含兩個鍵,即 HTML 標記的名稱作為名稱,文本作為文本。 我正在循環遍歷數組的所有 object,然后將object['name']與固定標簽名稱進行比較,例如strong、h1、h2、pre、var並使用具有我喜歡的樣式的組件顯示文本內容如果像這樣阻止:
const TagSelector = function(tagName , $text , $key){
if(tagName == "strong"){
return <Text key={$key} style={{ fontWeight: 'bold' , paddingHorizontal:3 , paddingVertical:10}}>{$text}</Text>
}
if(tagName == "h1"){
return <H2 key={$key} >{$text}</H2>
}
if(tagName == "h2"){
return <H3 key={$key} style={{paddingHorizontal:5 , paddingVertical:5 }}>{$text}</H3>
}
if(tagName == "pre"){
return <Text key={$key} style={{ fontSize:11 , paddingHorizontal:7 , paddingVertical:7 , borderColor: '#d8d7d7', borderWidth: 1 , backgroundColor:'#eee' , borderRadius:10, margin:5 }}>{$text}</Text>
}
if(tagName == "var"){
return <View style={{flexDirection:'row', flexWrap:'wrap' , justifyContent:'space-between'}}><Text key={$key} style={{backgroundColor:'red' , color:'black' }}>{$text}</Text>
</View>
}
}
我的 Object:
var collection = [{
"name": "p",
"text": "Keywords are ..... . For example:"
}, {
"name": "var",
"text": "int"
}, {
"name": "var",
"text": " money;"
}, {
"name": "var",
"text": "Here, "
},
{
"name": "strong",
"text": "This is fine "
}]
循環 Function:
const ContentScreen = () => {
return <ScrollView style={{paddingHorizontal:12, marginTop:10}}>
{
collection.map((con , index)=>{
return TagSelector(con.name , con.text , index+'_Tags');
})
}
</ScrollView>
}
問題:
在var的情況下,我想創建這樣的樣式,它與預期 Output的第一個字母並排顯示:
Keywords are ...... For example:
int money; Here,
**This is fine**
我嘗試了什么:
我無法解決這個問題,請幫助我。
這是我嘗試時得到的 output。
這是代碼:
import React, {useState} from 'react';
import {View, Text} from 'react-native';
const App = () => {
const [data] = useState([
{
name: 'p',
text: 'Keywords are ..... . For example:',
},
{
name: 'var',
text: 'int',
},
{
name: 'var',
text: ' money;',
},
{
name: 'var',
text: 'Here, ',
},
{
name: 'strong',
text: 'This is fine ',
},
]);
const renderElements = () => {
let jsx = [];
let varElements = [];
data.forEach((item) => {
if (item.name === 'var') {
varElements.push(<Text>{item.text}</Text>);
} else {
if (varElements.length > 0) {
jsx.push(<View style={{flexDirection: 'row'}}>{varElements}</View>);
}
varElements = [];
jsx.push(<Text>{item.text}</Text>);
}
});
return jsx;
};
return <View>{renderElements()}</View>;
};
export default App;
魔法發生在 renderElements function 內部。
let jsx = []
<--- 這是整體生成的 JSX。let varElements = []
<-- 我們在其中臨時存儲重復出現的 var 元素,然后推送到 JSX。varElements
,否則我們檢查是否已經有一些varElements
,如果有,然后我們將它們分組到<View/>
中,使用flexDirection:'row';
並將它們推送到 JSX 數組。 然后我們清空 varElements 數組並將其他類型的元素推送到 JSX。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.