React DAY05

复习:

1.JSX中的数据绑定
内容绑定<div>{表达式}</div>
属性绑定<img src={表达式}/>
样式绑定<div className={表达式} style={样式对象}></div>
事件绑定<button onClick={函数} onClick={()=>函数(参数)}></button>
双向数据绑定
受控组件<input value={uname} onChange={e=>setUname(e.target.value)}/>
非受控组件

let resume = useRef( )    //reference引用
let comment = useRef( )
<input  ref={resume} />   
<textarea  ref={comment}></textarea>
onSubmit(){  resume.current.value       comment.current.value }

条件渲染
仿v-show:<div style={{display: 判定表达式?'block':'none'}}>
仿v-if:{ 判定表达式 && JSX } { 判定表达式 ? JSX1 : JSX2 }
列表渲染:
现实:let empList = ['亮亮', '小鑫', '小铭']
理想:

//let empList = [<li>小烙</li>, <li>小蜜</li>, <li>小柔</li>]
<ul>{ empList.map((e,i)=><li key={i}>{e}</li>) }</ul>

2.创建自定义组件的两种语法:
①类式组件(Class Component)

class BuyCount extends React.Component{
		state = { count: 0 }
		//生命周期方法-挂载阶段:constructor() / render() / componentDidMount()
		//生命周期方法-更新阶段:shouldComponentUpdate() / render() / componentDidUpdate()
		//生命周期方法-卸载阶段:componentWillUnmount()
		add = ()=>{  this.setState({count: this.state.count+1})  }
		render(){
			return <button onClick={this.add}>{this.state.count}</button>
		}
	}

②函数式组件(Function Component)

function BuyCount( props ){
		let [count, setCount] = useState(0)
		//生命周期方法
		useEffect( ()=>{
			//生命周期方法1=组件挂载+任意数据更新(新值)
			return ()=>{
				//生命周期方法4=任意数据更新(旧值)+组件卸载
			}
		} )
		useEffect( ()=>{
			//生命周期方法2=组件挂载+指定数据更新(新值)
			return ()=>{
				//生命周期方法5=更新数据更新(旧值)+组件卸载
			}
		} , [依赖列表,...])
		useEffect( ()=>{
			//生命周期方法3=组件挂载
			return ()=>{
				//生命周期方法6=组件卸载
			}
		} , [ ] )   //空依赖
		let add = ()=>{ setCount( count+1 ) }
		return <button onClick={add}>{count}</button>
	}

3.ReactNative组件库

一、React Native组件库

React是一个MVVM框架;
ReactNative是一个基于React框架的移动端UI组件库——是Facebook官方提供的;
官网:https://reactnative.dev/
中文网:https://reactnative.cn/
Vue.js+Vant项目运行原理:

  .vue  =>  Webpack编译  =>  .html/.css/.js   =>   运行于客户端浏览器

React+RN项目运行原理:

  .js/.jsx => Webpack编译  =>  .java或.oc  =>  JAVA或OC编译  =>  .apk或.ipa安装包   =>  安装到手机中运行为原生App(完全脱离浏览器)

(必选操作)运行空白RN项目,在自己的电脑和手机中运行该项目——250MB+
①PC端运行RN项目自带的开发服务器

cd  MyRnApp   &&   npm  start

提示:开发服务器只会占用8081端口

②启动安卓模拟器,安装RN项目编译得到的App
APK路径:MyRnApp\android\app\build\outputs\apk\debug
③启动手机中的App,在App设置中配置开发服务器的IP和端口号
查看Windows服务器当前的真正IP地址: ipconfig
例如,我当前电脑的IP地址是 192.168.0.105

点击手机“菜单键”> Settings > DebugServerHost&PortForDevice > 输入:
	192.168.0.105:8081

④重启手机中的App,会自动连接开发服务器,获取最新的内容

提示:如果出现App闪退、App已停止、App无法启动、App启动后白屏…请重启App、或重新安装App、重启Windows、安装其它的模拟器… 再重试上述几步

二、RN中的样式

第一种:行内样式
<Text  style={{color:'#f00'}}>
第二种:内部样式
let css = StyleSheet.create({	
	danger: {
		color: '#f00',  
	}
})
第三种:外部样式

说明:
①RN中的样式没有“级联”特性,即子组件不会继承父组件的样式——仅有的一个例外:Text中的Text
②RN中的样式只能用style属性赋值,没有class/className属性——RN组件体系中没有任何一个属性是通用的,例如:有的组件没有style、所有组件都没有className、有的组件没有onClick…
③style属性可以赋值为一个样式对象,也可以赋值为一个样式对象的数组
④RN中可用的样式属性比标准CSS要少得多,例如:没有float、background、border…;有些属性虽然有,但是可用值也比标准CSS少得多,例如:display只有flex和none两种选择
⑤RN的样式中没有“选择器”的概念,样式都是对象
⑥RN中的尺寸单位只有: px 和 %,其中px必须省略不写,例如:width: ‘50%’ 或 width: 20 —— 没有rpx、vw、em等单位
⑦字体默认大小是14px(记得省略px),可以很大,也可以很小(没有12px的限制)
⑧RN中的布局只有: display: flex(默认值),而且主轴方向默认是“column”
在这里插入图片描述

三、RN中的组件

RN组件的官网手册:https://reactnative.cn/docs/components-and-apis
①RN中不能使用HTML组件 —— RN中的组件最终都要编译为JAVA,而HTML标签无法编译
②RN官方提供了20个组件;可以使用这20个组件组合定义出更复杂的自定义组件

RN常用组件:
View:视图,是最简单的容器元素,默认都是“弹性容器”,而且主轴方向是纵向
Text:文本,是最简单的文本元素,RN体系内只有Text中可以放置字符串
Image:图像
本地图片:手机中的图片,必须把开发服务器上的图片进行编译打包,才能装进手机中

<Image source={require('../img/xx.png')}/>   无需指定尺寸

远程图片:图片在远程服务器上,只能通过URL地址来访问

<Image source={{uri: '图片的地址'}}  style={{width, height}}/>   必须指定尺寸

TextInput:单行文本输入框/单行密码输入框/多行文本输入框

互联网小知识:

URL:Unified Resource Locator,统一的资源定位符,例如:
      https://www.tmooc.cn:80/img/news/101.jpg
URN:Unified Resource Naming,统一的资源命名符,例如:
      tel: 13501234567、mailto: admin@tedu.cn、
      javascript: window.close()、data: image/png;base64, iVBORw0KGgoA
URI:Unified Resource Identifier,统一的资源识别符,URI = URL + URN
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值