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-app cd my-app
    npm start
    ## 如果npm版本5.2.0+,可以使用npx进行初始化
    npx create-react-app my-app cd 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函数修改数据并更新ui
    this.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中。

组件生命周期

  • 生命周期常用的函数

    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>

React01的更多相关文章

  1. react-01

    比较了半天VUE.Angular.React,最终选择React,下面从几个例子开始React的学习,先从单个的index.html,引用react.js开始 一.最简单的纯JS的代码 <!DO ...

  2. React01补充

    使用yarn安装脚手架 npm i -g yarn npm uninstall -g create-react-app yarn global add create-react-app create- ...

  3. 027 (H5*) react01

    目录 正文 1:创建Vue项目 1: 全局安装 vue-cli cnpm install --global vue-cli 2: 创建一个基于 webpack 模板的新项目 vue init webp ...

  4. 构建react项目失败解决办法

    1.初始化项目,报下方错误 2.解决方法,更新淘宝镜像 npm config set registry https://registry.npm.taobao.org 3.在初始化项目 create- ...

  5. yoman搭建你的react-webpack应用

    还没有npm和node的要提前做好准备工作 做好这一切之后 我们安装yo,记住安装在全局变量中,我们需要用他的命令工具 npm install -g yo 接下来安装yo提供的react-webpac ...

  6. create-react-app 入门学习

    全局安装 create-react-app npm install create-react-app -g 创建项目 在全局安装了create-react-app 后 创建项目,如果按照下面的第一种办 ...

随机推荐

  1. node.js 下使用 util.inherits 来实现继承

    上一篇博客说到了node.js继承events类实现事件发射和事件绑定函数,其中我们实现了一个公用基类 _base ,然后在模型中差异化的定义了各种业务需要的模型并继承 _base 公共基类.但是其中 ...

  2. 20145238-荆玉茗《Java程序设计》课程总结

    每周读书笔记链接汇总 第一周读书笔记: 第二周读书笔记: 第三周读书笔记: 第四周读书笔记: 第五周读书笔记: 第六周读书笔记: 第七周读书笔记: 第八周读书笔记: 第九周读书笔记: 实验报告链接汇总 ...

  3. 牛客国庆day 6 A

    题目链接 : https://ac.nowcoder.com/acm/contest/206/A 这个题去年有幸去秦皇岛参加集训,见过这道题,当时特别菜还不会网络流,现在学了一点发现这个网络流还是比较 ...

  4. Ray-AABB交叉检测算法

      最近在解决三维问题时,需要判断线段是否与立方体交叉,这个问题可以引申为:射线是否穿过立方体AABB.   在3D游戏开发中碰撞检测普遍采用的算法是轴对齐矩形边界框(Axially Aligned ...

  5. N76E003---输入捕获

    输入捕获 根据芯片手册,定时器2可以作为输入捕获使用,设置非常简单,官方也提供了宏给我们使用 void Time2_cap_init(void) { /******* 输入捕获CF设置 ******* ...

  6. 1、SpringBoot------表单校验

    开发工具:STS 代码下载链接:https://github.com/theIndoorTrain/Springboot/tree/1ef5e597a6f866e73387c0238dbcdf46cf ...

  7. 爬虫学习(十六)——jsonpath

    jsonpath介绍 jsonpath是一种信息抽取类库,是从json文档中抽取指定信息的工具,提供多种语言实现的版本 jsonpath对json来说,就相当于xpath对于xml jsonpath和 ...

  8. H5拍照、选择图片上传组件核心

    背景 前段时间项目重构,改成SSR的项目,但之前用的图片选择上传组件不支持SSR(server-side-render).遂进行了调研,发现很多的工具.但有的太大,有的使用麻烦,有的不满足使用需求.决 ...

  9. 对文件 I/O,标准 I/O 的缓冲的理解

    1.标准I/O缓冲区 要理解标准I/O,就要先知道文件I/O的业务逻辑. 下面图示为文件I/O 如执行下面的代码: write(fd, buf2, sizeof(buf2)); 图中 buf:就是bu ...

  10. 第一章 UNIX 基础知识

    1.1 Unix体系结构 OS定义为一种软件,它控制计算机硬件资源,提供程序运行环境,一般称其为内核(kernel),它体积小,位于环境中心. 内核的接口为系统调用(system call),共用函数 ...