React-Native开发总结-html层面上的问题
来源:互联网 发布:销售网络评价与改进 编辑:程序博客网 时间:2024/05/29 13:04
最近更新时间:2017年10月29日14:50:47
做前端开发,熟悉了HTML+CSS+JS的开发模式,如果不看RN原理,直接用老一套的逻辑思维上手RN,可能会大跌眼镜。高效开发的前提,需要学习并理解RN的原理。本文主要记录内容是,关于RN开发的HTML层面上的问题。
1、RN的HTML
RN提供的组件(在HTML中叫标签)中常用的有:
View-视图容器,可用属性:style={[Styles.nav,{borderColor:'#0ff'}]}、onLayout={(event)=>{this.getViewInfo}}
getViewInfo(event){console.log(event.nativeEvent.layout.height)}//获取视图容器的宽高属性
Text-文本容器,可用属性:style={{textAlign:'center'}]}、numberOfLines={2}该组件设置固定宽度后超出的文字会在第二行的末尾以省略号的形式显示
TouchableOpacity-按钮/可触发点击事件的区域,可用属性:onPress={()=>{this.todo()}}、activeOpacity={1}点击触发后内容没有消隐效果
ScrollView和FlatList-滚动列表,属性较多,不罗列;
Image-图片容器,可用属性:source={require('.../.../img/top.png')}
Modal-模态框,可作为toast的无需操作2秒消失的警告或提示信息,也可作为有交互按钮的操作提示对话框;
2、RN的CSS
样式声明:const StylesComponent = StyleSheet.create({
text:{fontSize: 14},
textColor:{color:'#fff'}
});
样式使用的四种形式:
<Text style={StylesComponent.text}></Text>
<Text style={{color:'#fff'}}></Text>
<Text style={[StylesComponent.text,{color:'#fff'}]}></Text>
<Text style={[StylesComponent.text,StylesComponent.textColor]}></Text>
RN的盒子模型:box-sizing: border-box,width包括border和padding;
CSS属性的书写方式为驼峰式,如fontSize;
布局方式为flexbox,弹性盒子模型,在 React-Native 中的flexbox 是css3中flexbox的一个子集,并不支持所有的flexbox属性;关于更高级的布局方案,需要在实际项目中多练习多总结;
常用的CSS属性:官方给出的全部属性如下,
3、常规布局方案
需求一:如下图所示,右侧布局为flex布局,子元素水平布局,并且会每三个元素自动换行,两遍间距10px,中间间距16px;
Label组件实现代码如下:
class Label extends Component{
constructor(props){
super(props);
this.state = {
selected: false
}
}
clicked(){
if(this.state.selected){
this.setState({
selected: false,
});
}else{
this.setState({
selected: true,
});
}
}
render(){
return(
<TouchableOpacity onPress={() => {this.clicked()}} activeOpacity={1}>
<View
style={{borderWidth:D(1), width:D(64), height:D(24), borderRadius:D(2), alignItems:'center', justifyContent:'center', marginTop:D(16),
backgroundColor: this.state.selected ? '#fff' : '#f5f5f5',
borderColor: this.state.selected ? '#ff6700' : '#f5f5f5',
marginRight: (this.props.index+1)%3 == 0 ? D(10) : D(16),
}}>
<Text style={{
color: this.state.selected ? '#ff6700' : '#757575',
}}>{this.props.item}</Text>
</View>
</TouchableOpacity>
)
}
}
最后,关于更多布局上的交互实践动态布局问题,请查看我的博文React-Native开发总结-前端常规需求实现方案
- React-Native开发总结-html层面上的问题
- React-Native开发总结-react层面上的问题
- React-Native开发总结-原生APP层面上的问题
- React-Native开发总结-redux层面上的问题
- React Native开发遇到的问题——总结
- 【React Native】导入github上react native遇到的问题。
- React Native开发总结
- react-native 问题总结
- React Native问题总结
- React native 问题总结
- react native 遇到的问题总结
- xcode 对react-native的开发问题
- React-native 开发遇到的问题
- React native 开发遇到的问题汇总
- React Native 开发中遇到的问题
- 在windows上搭建React Native开发环境时遇到licence问题的解决
- React-Native开发总结-webview
- React-native 遇到问题总结
- [Unity]Android Build Support 官方组件的下载安装问题
- HDU 6113 度度熊的01世界(简单dfs)
- majority算法及Python 3.5实现
- Spring+SpringMVC+MyBatis整合配置
- 启动hadoop 2.6遇到的datanode启动不了
- React-Native开发总结-html层面上的问题
- Android Studio 快捷键整理分享
- spring整合junit
- 特征点提取与匹配
- Spring Cloud在国内中小型公司能用起来吗?
- LeetCode 415. Add Strings
- 学习C程后的感想
- Python3.6.3+opencv3.3.0学习笔记十四--基于分类器的动态人脸人体捕获
- 10.29_周总结