您需要爲每個<Picker>
組件的每個值保留狀態。有多種方式可以做到這一點。一種方法是:
<Picker
selectedValue={this.state.picker1}
onValueChange={(lang) => {
let state = this.state;
state['picker1'] = val;
this.setState(state);
}}>
<Picker.Item label="Java" value="java" />
<Picker.Item label="JavaScript" value="js" />
</Picker>
示例代碼
import React, { Component } from 'react';
import {
AppRegistry,
StyleSheet,
Text,
View,
TextInput
} from 'react-native';
export default class DemoProject extends Component {
constructor(props) {
super(props);
this.state = {};
}
_renderInputs() {
const inputCount = 4;
const inputs = [];
for (let i = 0; i < inputCount; i++) {
const stateValueIdentifier = 'text' + i;
inputs.push(
<TextInput
style={styles.inputStyle}
key={'text-input-' + i}
onChangeText={(text) => {
let state = this.state;
state[stateValueIdentifier] = text;
this.setState(state)
}}
value={this.state[stateValueIdentifier]}
/>
)
}
return inputs;
}
render() {
return (
<View style={styles.container}>
<Text>test</Text>
{this._renderInputs()}
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
flexDirection: 'column'
},
inputStyle: {
height: 40,
borderColor: 'gray',
borderWidth: 1,
flex: 1
}
});
AppRegistry.registerComponent('DemoProject',() => DemoProject);
我動態創建這些組件。我不知道會有多少人。此解決方案與樣板代碼類似,並不能解決我的問題。 – Alex
當你創建它們時,你需要定義一個你可以使用的狀態變量。狀態變量可以動態創建,所以我不明白爲什麼你不能使用這種方法。 – Ismailp
我使用條件呈現基於JSON文件創建它們。創建狀態變量我無法在渲染循環中執行。所以我相信我必須先解析JSON,爲您的解決方案創建狀態變量? – Alex