React Native App
XFood这是我业余时间,自学RN时写的一个app先看下效果图:同时能运行在android跟ios设备,开发起来也很快,主要用到的知识有:
其他知识梳理:
import Mainpager from './Mainpager';
export default class XFoodMain extends Component {
render() {
var defaultName = 'Mainpager';
var defaultComponent = Mainpager;
return (
<Navigator
initialRoute={
{
name:defaultName,component: defaultComponent,}
}
configureScene={
()=>{
return Navigator.SceneConfigs.HorizontalSwipeJump;
}
}
renderScene={
(route,navigator)=>{
let Com=route.component;
return <Com {...route.params} navigator={navigator} />;
}
}>
</Navigator>
);
}
import Button from '../../widget/Button';
import AllKindsFood from '../allkindsFood/AllKindsFood';
export default class Mainpager extends Component {
// 构造
constructor(props) {
super(props);
// 初始状态
this.state = {
navigator: null,};
}
comeIn = () => {
if(this.state.navigator){
this.state.navigator.push({
name: 'AllKindsFood',component: AllKindsFood,params: {
title: 'wtf',name: 'hehda',},})
}
};
render() {
return (
<View style={styles.container}>
<Text style={styles.welcome}>
欢迎使用XFood
</Text>
<Button ref="button" text={"进入"} button_bg={"#1c4ef2"} onclick={this.comeIn}/>
</View>
);
}
componentDidMount() {
var {navigator} =this.props;
this.setState(
this.state = {
navigator: navigator,});
}
}
import TabBar from 'react-native-xtabbar';
import HomeFoodPager from './HomeFoodPager';
import TitleBar from '../../widget/TitleBar';
const Dimensions = require('Dimensions');
const {width} = Dimensions.get('window');
const {height} = Dimensions.get('window');
export default class AllKindsFood extends Component {
// 构造
constructor(props) {
super(props);
var {navigator,route}=this.props;
// 初始状态
this.state = {
navigator: navigator,};
}
render() {
press = (index) => {
};
back = () => {
var {navigator}=this.props;
if (navigator != null) {
navigator.pop();
}
};
return (
<View style={styles.container}>
<TitleBar title="XFood" leftTitle="上一级" title_bg="#1c4ef2"/>
<TabBar
style={styles.content}
onItemSelected={(index)=>press(index)}
>
<TabBar.Item
icon={require('../../image/home_normal.png')}
selectedIcon={require('../../image/home_pressed.png')}
title='首页'>
<HomeFoodPager navigator={this.state.navigator}/>
</TabBar.Item>
<TabBar.Item
icon={require('../../image/find_normal.png')}
selectedIcon={require('../../image/find_pressed.png')}
title='其他'>
<HomeFoodPager navigator={this.state.navigator}/>
</TabBar.Item>
</TabBar>
</View>
);
}
}
import FoodDetail from './FoodDetial'; const Dimensions = require('Dimensions'); const {width} = Dimensions.get('window'); const {height} = Dimensions.get('window'); const foodJsonData = require('../data/foodData.json'); const ds = new ListView.DataSource({rowHasChanged: (r1,r2) => r1 !== r2}); const url = 'http://api.jisuapi.com/recipe/byclass?classid=2&start=0&num=10&appkey=019edfd7e2c45c72'; export default class HomeFoodPager extends Component { // 构造 constructor(props) { super(props); // 初始状态 this.state = { dataSource: ds.cloneWithRows(foodJsonData.result.list),}; } render() { pressItem = (rowData) => { const {navigator}=this.props; console.log(rowData.name); if(navigator!=null){ navigator.push({ name:"FoodDetail",component:FoodDetail,params:{ rowData:rowData,} }) } }; renderRowData = (rowData,rowID) => { return <TouchableOpacity activeOpacity={0.5} onPress={()=>pressItem(rowData)} > <View style={styles.cellStyle}> <Image style={{width:100,height:100}} source={{uri: rowData.pic}}/> <View style={styles.rightStyle}> <Text style={{fontWeight:'bold'}} numberOfLines={1} > {rowData.name }</Text> <Text style={{width:0.7*width,textAlign: 'left',fontWeight:'normal',marginTop:10} } numberOfLines={3} > {rowData.content }</Text> </View> </View> </TouchableOpacity> }; return ( <ListView style={styles.container} dataSource={this.state.dataSource} renderRow={(rowData,rowID) => renderRowData(rowData,rowID)} /> ) } //获取网络数据 componentDidMount() { fetch(url).then((response) => response.json()) .then((responseJson) => { var jsonData = responseJson.result.list; console.log("数据大小:" +responseJson); this.setState( this.state = { dataSource: ds.cloneWithRows(jsonData),} ); }) .catch((error) => { console.error(error); }); } }
const Dimensions = require('Dimensions'); const {width} = Dimensions.get('window'); export default class FoodDetial extends Component { // 构造 constructor(props) { super(props); // 初始状态 this.state = { rowData: '',}; } render() { let data = this.state.rowData; console.log(data); return ( <View style={styles.container}> <TitleBar title="详情页" leftTitle="上一级" title_bg="#1c4ef2"/> <ScrollView> <View style={styles.foodCeil}> <Text style={{backgroundColor:'#f2c11e',color:'#fff',paddingTop:5,paddingBottom:5}}>菜肴名称</Text> <View style={styles.foodheader}> <Image style={styles.foodLogo} source={{uri:data.pic}} resizeMode={'stretch'}/> <Text style={{marginLeft:3}}>菜谱名称:{data.name}</Text> </View> <Text style={{backgroundColor:'#f2c11e',paddingBottom:5,marginTop:4}}>菜肴说明</Text> <Text style={{backgroundColor:'#fff',paddingBottom:5}}>类型:{data.tag}</Text> <Text style={{backgroundColor:'#f2c11e',marginTop:4}}>菜肴介绍</Text> <Text style={{backgroundColor:'#fff',paddingBottom:5}}>介绍:{data.content}</Text> <Text style={{backgroundColor:'#f2c11e',marginTop:4}}>菜肴准备</Text> <Text style={{backgroundColor:'#fff',paddingBottom:5}}>菜肴准备: {this.getData()}</Text> <Text style={{backgroundColor:'#f2c11e',marginTop:4}}>开始制作</Text> <View style={styles.step}> {this.getStep()} </View> </View> </ScrollView> </View> ) } getStep=()=>{ var contentView =[]; let data = this.state.rowData; if (data.process != null) { for(let i=0;i<data.process.length;i++){ contentView.push( <View key ={i} style={styles.foodheader}> <Image style={styles.foodLogo} source={{uri:data.process[i].pic}} resizeMode={'stretch'}/> <Text style={{marginLeft:3,width:width*0.6}} numberOfLines={3} >第{i+1}步:{data.process[i].pcontent}</Text> </View> ) } return contentView; } }; getData = () => { let data = this.state.rowData; if (data.material != null) { var s = ''; for (let i = 0; i < data.material.length; i++) { s += data.material[i].mname + "" + data.material[i].amount + ',t'; } return s; } }; componentDidMount() { const {rowData}=this.props; console.log(rowData.name); this.setState(this.state = { rowData: rowData,}); } }
大概内容这么多,当然还有一些细节东西,比较适合初学者学习,喜欢的就下载看看吧!github(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |