循环反应
我想根据用户选择的播放器的号码制作一个字段列表。 我想要做这样的事情:
generatePaymentField() {
var noGuest = this.state.guest;
var payment =
<View>
<View>
<View><Text>No</Text></View>
<View><Text>Name</Text></View>
<View><Text>Preference</Text></View>
</View>;
for (var i=0; i < noGuest; i++) {
payment = payment +
<View>
<View>
<TextInput />
</View>
<View>
<TextInput />
</View>
<View>
<TextInput />
</View>
</View>;
}
return payment;
}
render () {
var payment = this.generatePaymentField();
this.setState({payment : payment});
return (
<View>
{this.state.payment}
</View>;
)
}
但是react-native将上面的语法视为指向for循环行的'意外标记'。 有没有其他办法可以做到这一点?
这应该工作
render(){
var payments = [];
for(let i = 0; i < noGuest; i++){
payments.push(
<View key = {i}>
<View>
<TextInput />
</View>
<View>
<TextInput />
</View>
<View>
<TextInput />
</View>
</View>
)
}
return (
<View>
<View>
<View><Text>No</Text></View>
<View><Text>Name</Text></View>
<View><Text>Preference</Text></View>
</View>
{ payments }
</View>
)
}
首先,我建议将您想要渲染的项目(在您的案例列表中)作为一个单独的组件来编写:
function Field() {
return (
<View>
<View>
<TextInput />
</View>
<View>
<TextInput />
</View>
<View>
<TextInput />
</View>
</View>
);
}
然后,就你的情况而言,当基于某个数字而不是列表进行渲染时,我会将render循环之外的for循环移出一个更具可读性的代码:
renderFields() {
const noGuest = this.state.guest;
const fields = [];
for (let i=0; i < noGuest; i++) {
// Try avoiding the use of index as a key, it has to be unique!
fields.push(
<Field key={"guest_"+i} />
);
}
return fields;
}
render () {
return (
<View>
<View>
<View><Text>No</Text></View>
<View><Text>Name</Text></View>
<View><Text>Preference</Text></View>
</View>
{this.renderFields()}
</View>;
)
}
但是,还有更多的方式来呈现原生反应中的循环内容。 本文将介绍大多数方法,因此如果您对更多细节感兴趣,请查看它。 文章中的示例来自React,但所有内容都适用于React Native!
链接地址: http://www.djcxy.com/p/52049.html上一篇: Loop in react