React01

目录

  • React-day01 入门知识
    • React介绍
      • 官网
    • React开发环境初始化 SPA
      • 脚手架初始化项目(方便,稳定)*
      • 通过webpack进行初始化
      • 配置镜像地址
    • 开发工具配置
    • 元素渲染
    • 组件及组件状态
      • 函数定义组件(无状态)
      • 类定义组件(有状态)*
      • 组合组件
      • Props属性*
      • State状态*
    • 组件生命周期
    • 事件处理
      • 定义组件事件
      • 属性初始化器语法*
      • 参数传递*
      • 计数器游戏
    • style样式(JSX写法)

React-day01 入门知识

React介绍

Facebook脸书-> Instagram照片墙 。 于2013年5月开源

帮助开发者简洁、直观地构建高性能的UI界面

  • 高效:模拟Doument Object Model,减少DOM交互 (速度快)
  • 灵活:可以与已知的库配合使用
  • 声明式: 帮助开发者直观的创建UI
  • 组件化:把相似的代码通过封装成组件进行复用

官网

官方网站: https://reactjs.org/

中文网站: https://doc.react-china.org/

React开发环境初始化 SPA

  • react :React开发必备库
  • react-dom:web开发时使用的库,用于虚拟DOM,移动开发使用ReactNative

脚手架初始化项目(方便,稳定)*

  • 执行初始化命令:

    #保证Node版本>=6
    npm install -g create-react-app
    create-react-app my-appcd my-app
    npm start
    ## 如果npm版本5.2.0+,可以使用npx进行初始化
    npx create-react-app my-appcd my-app
    npm start
  • npm和yarn命令对比

通过webpack进行初始化

步骤文档

配置镜像地址

  • 查看当前镜像配置:

    npm config list

    npm config get registry

  • 设置当前镜像地址

    npm config set registry https://registry.npm.taobao.org/

    npm config set disturl https://npm.taobao.org/dist

开发工具配置

  • 添加JavaScript语法支持
  • 安装开发插件: JavaScript,npm, markdown, Node.js, Reactjs

元素渲染

  • 元素是构成React应用的最小单位

    import React from 'react';
    import ReactDOM from 'react-dom';const element = (<div><h1>HaHa!</h1><h2>Hello Itheima element</h2></div>
    );// ReactDOM进行元素渲染
    ReactDOM.render(element,document.getElementById('root')
    );
  • React对JSX语法转换

    const element = (    <div className="eleClass">        HaHa!  </div>
    );

    转换js后

    const element = React.createElement("div",{ className: "eleClass" },"HaHa!"
    );

组件及组件状态

组件可以将界面分割成独立的、可复用的组成部分。只需要专注于构建每个单独的部分。比如按钮,对话框,列表,输入框都是组件。

  • 组件可以接受参数(props),可以返回一个在页面上展示的React元素

函数定义组件(无状态)

无状态组件:一般用于简单的页面展示

// 用函数定义了名为Hello组件
function Hello(props) {return <h1>Hello {props.name} !</h1>;
}// react进行元素渲染
ReactDOM.render(<Hello name="itheima props"/>,document.getElementById('root')
);

类定义组件(有状态)*

  • class 必须要ES6支持

有状态组件:可以维护自己的状态State信息,完成更加复杂的显示逻辑

// 用类定义 名为Hello组件
class Hello extends React.Component {render(){return <h1>Hello {this.props.name} !</h1>;}
}// react进行元素渲染
ReactDOM.render(<Hello name="itheima class"/>,document.getElementById('root')
);
  • 以上两种组件效果在React相同

类定义组件名称必须是大写

建议在return元素时,用小括号()包裹

组合组件

  • 组件之间可以相互引用,通常把App作为根组件

    // 用类定义 名为Hello组件
    class Hello extends React.Component {render() {return <h1>Hello {this.props.name} !</h1>;}
    }
    // 根组件
    function App(props) {return (<div><div><h2>团队名称: {props.team}</h2><p>成员个数: {props.count}</p><p>成立时间: {props.date.toLocaleString()}</p></div><Hello name="悟空" /><Hello name="八戒" /><Hello name="沙僧" /><Hello name="三藏" /></div>);
    }
    // react进行元素渲染
    ReactDOM.render(<App team="西天取经团" count={4} date={new Date()}/>,document.getElementById('root')
    );

  • 注意:组件的返回值只能有一个根元素,所以用一个div包裹所有Hello元素

  • 在google插件市场搜索安装React查看DOM结构

Props属性*

  • props有两种输入方式:
    • 引号"" :输入字符串值,
    • 大括号{} :输入JavaScript表达式,大括号外不要再添加引号。
  • props的值不可修改,属性只读,强行修改报错
  • 类定义组件中使用props需要在前边加 this.

State状态*

  • 自动更新的时钟

    class Clock extends Component {render(){return (<div><h1>当前时间:</h1><h3>current: {new Date().toLocaleString()}</h3></div>);}
    }setInterval(() => {ReactDOM.render(<Clock />,document.getElementById('root'));
    }, 1000);

    应用一般执行一次ReactDOM.reader() 渲染

    在组件内部进行更新, 每个时钟内部都维护一个独立的date信息

  • 在组件内部使用局部state状态属性

    class Clock extends Component {constructor(props) {super(props);// state定义:在constructor构造函数进行state状态的初始化this.state = {title: "时钟标题",date: new Date()};setInterval(() => {this.tick();}, 1000);}tick(){// 更新date, 数据驱动, 必须通过setState函数修改数据并更新uithis.setState({date: new Date()})}render(){return (<div><h1>{this.state.title}</h1><h3>current: {this.state.date.toLocaleString()}</h3></div>);}
    }ReactDOM.render(<Clock />,document.getElementById('root')
    );
  • state特性:

    1. state 一般在构造函数初始化。this.state={...}
    2. state可以修改,必须通过this.setState({...})更新并渲染组件
    3. 调用setState更新状态时,React最自动将最新的state合并到当前state中。

组件生命周期

React中组件的生命周期

  • 生命周期常用的函数

    componentDidMount:组件已挂载, 进行一些初始化操作

    componentWillUnmount: 组件将要卸载,进行回收操作,清理任务

事件处理

定义组件事件

class App extends Component {handleClick(e){console.log("handleClick!")console.log(this);}render(){return (<div><button onClick={() => this.handleClick()}>按钮:{'{() => this.handleClick()}'}</button></div>);}
}

属性初始化器语法*

// 属性初始化器语法 (Property initializer syntax)
handleClick = () => {console.log("handleClick!")console.log(this);
}

参数传递*

class App extends Component {handleClick(e, str, date){ // 参数要和调用者传入的一一对应console.log(this)console.log(e)console.log(str, date)}render(){return (<button onClick={(e)=>this.handleClick(e, "参数" , new Date())}>按钮1:{'箭头函数'}</button>);}
}

参数要和调用者传入的一一对应

计数器游戏

import React, { Component } from 'react';
import ReactDOM from 'react-dom';// 类定义组件的写法
class App extends Component {constructor(props) {super(props);// 绑定this到事件函数this.countPlus = this.countPlus.bind(this);this.state = { count: 0,timeSurplus: 10};}// 组件已挂载, 开启周期任务componentDidMount() {this.timerId = setInterval(() => {this.setState((preState) => ({timeSurplus: preState.timeSurplus - 1}))// 在合适的时候, 结束周期函数if(this.state.timeSurplus <= 0){clearInterval(this.timerId)}}, 1000);}countPlus(){// 更新当前count数字.console.log(this)// 如果时间到了, 返回if (this.state.timeSurplus <= 0){return;}// 更新数据会自动触发UI的重新render// this.setState({//     count: this.state.count + 1// })// 通过之前state状态更新现在的状态this.setState((preState) => ({count: preState.count + 1}))}render() {return (<div><h1>{this.props.title}</h1><h2>{this.state.timeSurplus <= 0 ? ("时间到, 总数" + this.state.count) : ("剩余时间:" + this.state.timeSurplus)}</h2><button onClick={this.countPlus}>计数: {this.state.count}</button></div>);}
}ReactDOM.render(<App title="计数器, 试试你的手速!"/>,document.getElementById('root')
);

style样式(JSX写法)

  1. 直接写在style属性中

    <button style={{width: 200, height: 200}}>我是按钮</button>
  2. 通关变量声明样式并引用

    const btnStyle = { width: 200, height: 200 };
    ...
    <button style={btnStyle} onClick={this.handleClick}>我是按钮</button>

转载于:https://www.cnblogs.com/xiaocongcong888/p/9436171.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/251002.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法 --- 反转数组

几个注意点: 1.输出的时候,也要做数字超出处理 2.js中可以使用 str -0 将字符串类型转换成数字类型 ( 注意不是 0) 3.可以使用 num ‘’ 将数字类型转换成字符串类型 4.使用str.split(’’) 可以将字符串转换成数组 5.使用arr.join(’’) 可以将数组转换成字符串 6.JS中2的31次…

ES6-13 正则方法、修饰符yus、UTF_16编码方式

修饰符 m multiLine 对于str中含\n的情况g globali ignoreCase 元字符 反斜杠加转义 元字符含义简写\w匹配字母、数字、下划线。等价于’[A-Za-z0-9_]’。word\W匹配非字母、数字、下划线。等价于 ‘[^A-Za-z0-9_]’。\s匹配任何空白字符&#xff0c;包括空格、制表符、换页…

cmd窗口快速定位到具体文件夹方法

在用Python进行机器实战时&#xff0c;打开cmd窗口后&#xff0c;总是到定位到kNN.py所在文件夹才能Python&#xff08;否则import kNN失败&#xff09;&#xff0c;每次都要输入地址非常麻烦 这里介绍一个cmd窗口快速定位到具体文件夹方法&#xff1a; 按住Shift键右击鼠标打开…

算法 --- 罗马数字转整数

解体思路: 1.写一个对象trans用于保存罗马和数字之间的映射关系 2.重点在于当数值小的出现在数值大的左边时,会减去该数,出现在右边时会加上该数,因此需要与后面的进行比较 3.在得到s时,首先给它转换成字符串,并在末位加一个0 /*** param {string} s* return {number}*/ var r…

正则 - 阮一峰

学习地址 一 正则实例方法 1. test 正则实例.test返回布尔值 var r /x/g; var s _x_x;r.lastIndex // 0 r.test(s) // truer.lastIndex // 2 r.test(s) // truer.lastIndex // 4 r.test(s) // false死循环&#xff0c;因为while循环的每次匹配条件都是一个新的正则表达式…

算法 --- 有效的括号

解题思路: 1.对括号分别赋值(左括号大于0,右括号小于0),方便后期比较 2.使用栈,对于大于0的字符串入栈,对于小于0的字符串,检查栈中是否有元素,若没有返回false,否则拿出栈顶的一个元素,和现在的元素进行比较 /** * param {string} s * return {boolean} */ var isValid func…

ES6-14 Unicode表示法、字符串方法、模板字符串

Unicode表示法 本身能正常识别的&#xff0c;加{}也能识别&#xff0c;花括号内的内容表示码点 parseInt(0061,16) // 十进制的97&#xff0c;97在ASCII码中对应a console.log(\u0061) // a console.log(\u{0061}) // a console.log(\u{61}) // a原型上方法 codePointAt(十进…

算法 --- 删除数组中重复项

解题思路: 如果输入的数组长度为1,则返回该数组否则(len>2),使用i记录当前待插入的位置,j记录下一个与nums[i]不相等的位置,leng为待返回数组的长度当nums[i] ! nums[j]时,把j位置的值nums[j]放在i1位置.同时i,j /*** param {number[]} nums* return {number}*/ var remov…

如何理解 Linux 中的 load averages

原文&#xff1a;https://mp.weixin.qq.com/s?src11&timestamp1533697106&ver1047&signaturepoqrJFfcNABv4biKKpa4mZdIW7No2Wo1F5sbZL7ggoVS2GqcSqwQQ8hMulAmezT*zL*klB-eE5BeMyNuyjuIH7YgkBAN25i6*ahhEpWyxqx6vPct-Vr7q7AU0YGe-F*l&new1 http://blog.scoutap…

Jsp+Servlet+MYSQL注册登录案例(界面难看,ε=(´ο`*)))唉)

注册登录界面尤为常见&#xff0c;我的界面尤为难看&#xff0c;勉为其难的写吧&#xff0c;前端不熟就是这样。。。 这个案例运用到了: 1.Jsp动态页面--->动态页面 2.Servlet逻辑判断后台---->实现界面与数据库/业务的连接&#xff0c;简而言之&#xff0c;起承转合。PS…

ES6-15 map与set

Promise、Proxy、Map、Set这些ES6新增的api无法用babel实现语法降级&#xff0c;需要使用到polyfill Set 成员是唯一的&#xff0c;不能重复有iterator接口&#xff0c;可迭代具有iterator接口的所有类型&#xff0c;都能作为new Set()的参数&#xff0c;如类数组、数组 con…

ES6-16 WeakMap与WeakSet、proxy与reflect

WeakMap/WeakSet 原型上不存在遍历方法(没有部署iterator接口)成员只能是对象垃圾回收机制不考虑对成员对象的应用 WeakSet/WeakMap 中的对象都是弱引用&#xff0c;即垃圾回收机制不考虑 WeakSet 对该对象的引用&#xff0c;也就是说&#xff0c;如果其他对象都不再引用该对象…

ES6-17 class与对象

class 模拟类的方式语法糖&#xff08;把以前的写法换了一个方式&#xff09; 类内部的方法是不可枚举的 ES5用Object.assign拓展的原型属性是可枚举的 function Point(x, y) {this.x x;this.y y; } // 这样定义的原型上方法eat\drink是可枚举的 Point.prototype Object…

算法 --- 二叉树的最大深度

思路: 1.二叉树的深度,等于Max(左子树最大深度,右子树最大深度) 1 2.节点不存在时,此时的深度为0 3.当节点存在,左右子树不存在时(此时为叶子节点) 返回1 /*** Definition for a binary tree node.* function TreeNode(val) {* this.val val;* this.left this.righ…

ES6-18/19 异步的开端-promise

ES6-18异步的开端-promise ES6-19 promise的使用方法和自定义promisify try catch只能捕获同步异常&#xff0c;不能捕获异步的 等待所有异步都执行完&#xff0c;打印结果&#xff0c;比较笨拙的方法&#xff0c;在每个异步操作加arr.length 3 && show(arr) Promis…

算法 --- 平衡二叉树

解题思路: 1.首先写一个返回深度的函数d 2.写一个遍历函数t 3.在t中首先判断,r是否为空(为空则此时就是平衡二叉树,返回true),然后判断是否为叶子节点(r.left null && r.right null)若是则返回true,最后判断,其左子树的深度与右子树的深度之差是否大于1.若是则返回fal…

【co】ES6-20/21 iterator与generator

ES6-20 iterator与generator ES6-21 async与await、ES6的模块化 try catch不能捕获异步异常 try catch是同步代码 try {setTimeout(() > {console.log(a)}) } catch (e) {console.log(e) }iterator 内部迭代器&#xff1a;系统定义好的迭代器接口&#xff08;如数组Symbol…

驱动芯片

一 LED驱动芯片&#xff1a; 1.1 TM1640:16位数码管驱动芯片&#xff0c;2线制控制&#xff08;CLK/DIN&#xff09;,SCLK低电平时DIN输入&#xff0c;而SCLK高电平时保持DIN保持不变&#xff1b;开始传输&#xff1a;SCLKH时DIN由高变低&#xff0c;停止传输SCLKH时DIN由由低变…

confusion_matrix(混淆矩阵)

作者&#xff1a;十岁的小男孩 凡心所向&#xff0c;素履可往 目录 监督学习—混淆矩阵 是什么&#xff1f;有什么用&#xff1f;怎么用&#xff1f; 非监督学习—匹配矩阵 混淆矩阵 矩阵每一列代表预测值&#xff0c;每一行代表的是实际的类别。这个名字来源于它可以非常容…

Python 21 Django 实用小案例1

实用案例 验证码与验证 KindEditor 组合搜索的实现 单例模式 beautifulsoup4 验证码与验证 需要安装Pillow模块 pip stall pillow1、首先需要借助pillow模块用来画一个验证码图形&#xff0c;这里单独封装了一个py文件&#xff0c;调用一个方法就好了 1 #!/user/bin/env python…