Mic*_*ael 20 javascript react-native
我确定有办法做到这一点,但我还是看不出怎么样.
我想做的是添加一个Picker组件,但不是硬编码项目列表,而是从服务中获取它并让Picker绑定到我以后可以填充的东西.
这是我的,但我的应用程序现在甚至不会运行.有什么想法吗?
'use strict';
var React = require('react-native');
var {
Picker,
Text,
View
} = React;
var AvailableServices = React.createClass({
getInitialState() {
var fetchServicesUri = 'http://some.url/available_services';
fetch(fetchServicesUri)
.then((response) => response.json())
.then((responseJson) => {
console.log(responseJson);
var services = [];
for(var service in responseJson.services) {
services.push(<Picker.Item label={service.Label} value={service.Value}/>);
}
this.setState({
services: services
});
})
.catch((error) => {
console.warn(error);
})
.done();
return {
services: [],
selectedService: null
}
},
render() {
return (
<View>
<Text>Pick a service</Text>
<Picker
selectedValue={this.state.selectedService}
onValueChange={(service) => this.setState({selectedService:service})}
>
{this.state.services}
</Picker>
</View>
);
}
});
module.exports = AvailableServices;
Run Code Online (Sandbox Code Playgroud)
Nad*_*bit 42
您应该将初始状态设置为空数组,然后在componentWillMount或componentDidMount上调用您的服务.我在这里设置了一些与虚拟数据一起使用的东西,并粘贴下面的代码.
'use strict';
var React = require('react-native');
var {
Picker,
Text,
View,
AppRegistry
} = React;
var PickerItem = Picker.Item;
var SampleApp = React.createClass({
getInitialState() {
return {
services: ['a', 'b', 'c', 'd', 'e'],
selectedService: 'a'
}
},
componentDidMount() {
setTimeout(() => {
this.setState({
services: [ 'one', 'two', 'three', 'four', 'five' ]
})
}, 3000)
},
render() {
let serviceItems = this.state.services.map( (s, i) => {
return <Picker.Item key={i} value={s} label={s} />
});
return (
<View>
<Text>Pick a service</Text>
<Picker
selectedValue={this.state.selectedService}
onValueChange={ (service) => ( this.setState({selectedService:service}) ) } >
{serviceItems}
</Picker>
</View>
);
}
});
AppRegistry.registerComponent('SampleApp', () => SampleApp);
Run Code Online (Sandbox Code Playgroud)
重要提示:如果您尝试使用数字数组进行迭代,map请不要忘记应该将 的label属性Picker.Item转换为字符串:
const pickerItems = [1,2,3].map(i => (
<Picker.Item label={i.toString()} value={i} />
));
Run Code Online (Sandbox Code Playgroud)
不需要循环,这里我是如何在我的基于本机的项目中做的,类似于上面的答案来动态绑定或添加数据 Picker
import React, {Component} from 'react';
import {Picker,View} from 'react-native';
export default class SampleApp extends Component {
constructor(props){
super(props);
// HARD CODED DATA , YOU CAN REPLACE THIS DATA WITH API CALL DATA IN ComponentDidMount()
//or in Constructor because countryData is not state.
this.countryData = ["India","Pakistan","USA"];
// STATE
this.state({
selectedCountry : null
});
}
// Our country list generator for picker
countryList = () =>{
return( this.countryData.map( (x,i) => {
return( <Picker.Item label={x} key={i} value={x} />)} ));
}
// RENDER
render() {
return (
<View>
<Picker
selectedValue={this.state.selectedCountry}
onValueChange={ (value) => ( this.setState({selectedCountry : value}) )}>
{ this.countryList() }
</Picker>
</View>
);
}
}
Run Code Online (Sandbox Code Playgroud)
希望你觉得我的例子很容易理解;)
| 归档时间: |
|
| 查看次数: |
27910 次 |
| 最近记录: |