用于构建用户界面的JavaScript 库,是三个框架中最简单 React:核心 使用React有两种方式: ①下载React CLI脚手架工具 ②进入项目仓库目录,运行React脚手架创建一 个空白项目 ③进入项目根目录,运行此脚手架项目
2.React核心概念之一 一JSX 浏览器不能直接运行JSX语法!需要使用JSX编译器,转换为浏览器可以执行的JS语法: Babel -第三方提供的JS编译器! 在页面中运行Babel解释器:
②JSX本质不是标签,而是在创建JS标签对象;属性都是JS DOM属性,而不是HTML标签属性,如class必须写作className ④JSX中若遇到<则会运行HTML解释器;遇到{则会运行JS解释器 提示: React JSX中没有类似Angular中的nglf和ngFor指令(React 3.React核心概念之:二一组件 class MyComponent extends React.Component{ 提示:①React 中的自定义组件必须继承自React.Component ②自定义组件中使用 render0方法返回组件的模板 ③自定义组件名首字母必须大写(推荐全驼峰法则); 而JSX中的html标签必须使用纯小写形式
提示: React 手册中提供了两种创建自定义组件的方式
React组件中的事件绑定语法是React所特有的! ②事件监听必须是一个function,不能是函数调用 ④事件处理函数默认有一个实参: Event 对象 < button onClick={ this.goBack }>
React中没有v-model/ngModel指令,监听表单元素值改变只能监听onChange
提示: React 中绑定的数据不能简单的是class属性!其采用的策略类 5.组件中的选择/循环
每个组件都可以声明自定义属性(Angular 中称为"输入属性”) 例如: this.props.labelTxt;子组件也可以通过this.props读取父组件传给自 己的处理函数,用于把子组件中的数据传递给父组件加以使用 React父子组件间数据传递:
<any ref="myChild01> this.refs.myChild01...此对象即为组件/元素对象 8.React核心概念之六一受控组件 ③受控组件要求用户必须监听onChange事件,在其中对用户输入进 |
||||
问题:三大框架是如何提高DOM操作效率的? React中所有的DOM操作底层:都不是直接修改DOM树! 而是React在内存中保存了一份DOM树副本-称为虚 -----用空间(更多的内存)换时间(DOM效率提高) |
||||
2.React中组件的生命周期钩子函数 componentDidMount():组件已经加载完成一适合 于加载异步数据 shouldComponentUpdate( ):组件应该更新吗?返回true即调用render,否则 阶段三:卸载阶段
3.React中发起异步请求方法 fetch(url, {}).then( (res)=>{ 示例:创建组件MyProductList,组件加载完成(componentDidMount)
4.React生态圈一一一React Native (RN) RN:使用JS和React编写NativeApp (原生应用) 注意: RN技术应属于"NativeApp"范畴,不能使用HTML/CSS, RN开发环境的搭建:脱离浏览器,访问测试需要使用
(2)进入项目仓库,运行RN脚手架创建项目 npm start 提示: 上述三步创建的项目是纯JS中,如果想编译为Android/iOS程序 项目名androidappuildoutputsapkdebugapp-debug.apk RN项目运行过程: 直接把app-debug.apk拖到夜神或蓝叠模拟器中就可以完成安装 注意查看以下服务器所在的IP地址(ipconfig)和端口号(8081) (3)运行手机中的项目App,会访问RN服务器获取最新的App内容 App客户端:
|
||||
1.RN中常用的组件一重点 (1)Text一一显示一段文字 用法: <Text style={} numberOfLines={3} ellipisizeMode= 'tail' > 注意: Text的父组件如果是Text则会继承样式,如果是其他组件就 (2)View一一 一块视图区域,类似于HTML中的DIV 用法: <View>... </View> 注意: View默认最大只能铺满手机屏幕,当内容太多超出了屏幕则 (3)Button-按钮 (4)Image- 图片 loadingIndicatorSource={require(' ./loading.gif')}/> (5)ImageBackground-背景图片 说明:背景图是双标记标签; -般推荐背景图都使用本地图片,但背景图即使是本 (7)TextInput--文本输入框 ②输入框的value绑定到状态数据 ③监听输入改变事件,处理方法中修改状态数据 (8)Switch-开关 ①在构造方法中声明状态数据this state = {isOnline:false} ②输入框的 value绑定到状态 (9)ActivityIndicator--活动提示器, “加载中” 提示符号 用法: <ActivityIndicator size ="large"color="gray"animating= {true}/> (10)TouchableOpacity--为可触摸组件提供透明效果 (3)FlatList--列表组件, 高性能的列表(相较于已废弃的ListView) onEndReached={this.fn} onEndReachedTreshold={0.1} (4)SectionList--列表组件, 列表项可以进行分组
2.为RN组件添加样式 let styles = StyleSheet.create({ |
||||
2.RN中的布局
RN中的组件布局采用的类似FlexBox 布局方案,但要比CSS3的 ②flexDirection: 排列方向: 'column' ,' row' |
||||
1.ReactNative阶段项目 ------------------------------------------------------------------------------ (3)声明并注册路由词典,修改App.js let routes = createStackNavigator({ 此时可以使用客户端进行测试,访问页签中的每个按钮 ----------------------------------------------------------------------------- (4)开始修改登录组件: LoginScreen.js, 添加页面内容 View
编写难点:布局、受控组件的输入绑定、fetch 发送POST请求 -------------------------------------------------------------------------------- (5)修改主菜单模板: MainScreen, 添加页面内容
编写难点:布局、标题栏的控制 -------------------------------------------------------------------------------- (6)修改商品列表屏幕模板: ProductListScreen.js, 添加页面内容 编写难点: FlatList、 子组件/父组件数据传递、fetch 和无限滚动 ----------------------------------------------------------------------------------
编写难点:布局、路由传参、自定义轮播组件、动态图片组件的使用 2.RN中的路由和导航 ①创建页面组件 ②定义路由词典 let routes = createStackNavigator({ main: MainScreen ③在根组件中注册路由词典 export default createAppContainer( routes ) ④路由跳转 //<LoginScreen navigation={}> ⑤跳转传参 页面1:this.props.navigation.navigate('页面2', { pid: 999, uname:" } ⑥为每个页面提供头部标题栏内容: |
||||
页面底部固定组件,布局如何实现: <View style={{flex: 1}}>
|
||||
3.如何在RN项目中显示“商品详情”数据? ? RN所有的组件代码最终都要被编译为原生OC/Java代码,不支持任何的HTML标签! 解决方案有两个: 方案1:在RN应用中嵌入一个HTML/CSS解释器(就是浏览器的核心)组件---WebView组件 |
||||