美文网首页
react 笔记 React 安装 和class组件

react 笔记 React 安装 和class组件

作者: 就是陈靓靓靓 | 来源:发表于2022-10-20 15:20 被阅读0次

react 笔记

01一、React 安装和目录结构

React官方中文文档 : https://react.docschina.org/

1. 认识React

React 是一个用于构建用户界面的 JAVASCRIPT 库。

React 起源于 Facebook 的内部项目,用来架设 Instagram 的网站,并于 2013 年 5 月开源。

React 拥有较高的性能,代码逻辑非常简单,越来越多的人已开始关注和使用它。

2. 快速构建 React 开发环境(脚手架)

create-react-app 是来自于 Facebook,通过该命令我们无需配置就能快速构建 React 开发环境。

create-react-app 自动创建的项目是基于 Webpack + ES6

查看本机是否安装create-react-app

create-react-app -V  

安 装  (目前使用create-react-app,要求必须是nodjs14以上的版本)

npx create-react-app my-app  // my-app为项目名称

npx临时安装create-react-app,并使用该模块创建项目my-app,创建之后删除安装包

进入目录

cd my-app

启动项目

npm start

3. React脚手架的目录结构 (了解)

node_modules: 存放第三方下载的依赖的包

public:资源目录

favicon.ico: 网站缩略图

index.html: 项目首页模板

manifest.json : 如果是一个 app ,定义 app 的图标 网址 主题颜色等

robots.txt : 这个表示任何搜索引擎,抓取工具的用户代理都可以访问这个网站的所有页面资源

如果robots.txt的内容 是:

User-agent: *disallow: /mytest1disallow: /mytest2disallow: /mytest3这样,就可以确保这三个页面不被任何搜索引擎抓取

src : 项目的所有源代码

index.js: 整个程序的入口 (react 的理念 all in js)

index.css: 初始化样式

App.js: 根组件

App.test.js: 自动化测试文件

App.css: 项目的样式

logo.svg: 首页 logo

setupTests.js  针对index.js的测试

reportWebVitals.js    Web Vitals是谷歌针对网页加载速度和体验所提出的一套指标,这套指标用于测试网页的加载速度及用户体验等等;谷歌基于这套指标不仅设计了多套测试工具,还针对各种指标提出了相应的优化方法

二、index.js入口文件

引入react

import React from 'react';

React包:用来编译JSX。  react的核心思想是虚拟DOM,react包含了生成虚拟DOM的函数react.createElement,及Component类。当我们自己封装组件时,就需要继承Component类,才能使用生命周期函数等。

引入react-dom

import ReactDOM from 'react-dom';

用来加载DOM。 核心功能就是把这些虚拟DOM渲染到文档中变成实际DOM

引入css文件

import './index.css';

引入组件

import App from './App';

渲染虚拟DOM到页面

ReactDOM.render(

,

document.getElementById('root')

);

<React.StrictMode> (了解)

StrictMode 是一个用以标记出应用中潜在问题的工具。就像 Fragment ,StrictMode 不会渲染任何真实的UI。它为其后代元素触发额外的检查和警告。

严格模式检查只在开发模式下运行,不会与生产模式冲突。

StrictMode目前有助于

1、识别具有不安全生命周期的组件

2、有关旧式字符串ref用法的警告

3、关于已弃用的findDOMNode用法的警告

4、检测意外的副作用

5、检测遗留 context API

6、将来的React版本将添加其他功能。

三、App.js

App.js 是根组件

引入图片资源

//import logo from './logo.svg';

import logo from './logo.jpg';

function App() {

return (

标题

);

}

export default App;

四、React组件

1. 函数组件

function Welcome(props) {

return

Hello, {props.name}

;

}

该函数是一个有效的 React 组件

它接收唯一带有数据的 “props”(代表属性)对象与并返回一个 React 元素(JSX)。

这类组件被称为“函数组件”,因为它本质上就是 JavaScript 函数。

2. class组件

还可以使用 ES6 的 class 来定义组件

react核心包中的Component是组件的父类,用来定义组件

render 方法必须要返回一个 JSX 元素

class Welcome extends React.Component {

render() {

return

Hello, {this.props.name}

;

}

}

上述两个组件在 React 里是等效的

3. 快速生成组件的插件

安装 VSCode插件:ES7 React... Snippets

生成函数式组件: rfc

生成class组件: rcc

html标签的自动补全功能

文件 -->  首选项 --> 设置 --> 用户 --> 扩展 --> Emmet --> Include Languages

添加:

键: javascript

值: javascriptreact

4. 使用组件注意事项

组件名要大写

return 只返回一行,不加(),如果多行,需要加()

组件中只有一个根元素

可以用Fragment做包裹元素,它不会被渲染为一个真实节点

组件要导出

5. 代码保存时格式混乱的解决方案

https://blog.csdn.net/impossible1994727/article/details/119806420

五、React的JSX语法

1. JSX 简介

const element = <h1>Hello, world!</h1>;

这个有趣的标签语法既不是字符串也不是 HTML

它被称为 JSX,是一个 JavaScript 的语法扩展。

JSX 可能会使人联想到模版语言,但它具有 JavaScript 的全部功能。

在编译之后,JSX 表达式会被转为普通 JavaScript 函数调用,并且对其取值后得到 JavaScript 对象(虚拟DOM)。

2. JSX 语法

标签在js中直接写,不用做为字符串加"", js语法的部分要在{}中定义

<div>{3 > 7 ? 'a' : 'b'}</div>

class属性用className替代,

<h1 className="title">标题</h1>

label标签的for属性用htmlFor替代

用户名

jsx中不能用if语句,用三元运算来替代

{3 > 7 ?

111

:

222

}

{

3 < 7 ?

111

:

222

}

dangerouslySetInnerHTML属性

//直接渲染,不解析标签

{str}

// 解析标签

注释需要写在花括号中

菜鸟教程

{/*注释...*/}

,

JSX会自动解析数组,渲染数组中的每个元素值

const list = ['a','b']

...

list.map((item,index) => {

return

  • {item}
  • })

    JSX添加style属性

    {/* 错误写法 */}

    {/*

    style */}

    {/* 正确写法 */}

    style

    02  数据绑定

    数据如何在模板中显示: this.state.数据

    数据如何改变  this.setState({})

    class 组件名 extends Component {

       constructor(){

           super()

           //state中的数据是响应式数据,数据改变,会触发视图重新渲染

           this.state = {

               inputValue: '',

               list: []

           }

       }

       //改变数据

       changeData = ()=>{

           console.log('调用函数')

           // react数据要用this.setState来改变

           this.setState({

               inputValue: 'hello'

           })

       }

       render(){

           return (

               <div>

                   显示数据:{this.state.inputValue}

                   单击按钮改变数据:  <button onClick={this.changeData}>改变数据</button>

               </div>

           )

       }

    }

    容易出错的地方

    下面这种绑定,会在没有单击按钮时就调用方法,而onclick绑定的只是方法执行后的返回值

    <button onClick={this.changeData()}>改变数据</button>

    事件绑定传参

    data-属性名携带参数

    <button onClick={this.changeData} data-index={3}>改变数据</button>

    changeData = (e)=>{

       console.log(e.target.dataset.index);

       console.log(this.state.msg);

    }

    事件绑定箭头函数,箭头函数内部调用事件处理程序

    <button onClick={()=>this.changeData('值')}>改变数据</button>

    changeData = (data)=>{

        console.log(data);

    }

    setState的各种用法

    没有回调

    this.state = {

       msg: 'apple'

    }

    changeData(){

        原因:setState是异步操作

        this.setState({

    msg: 'lemon'

      })

      console.log(this.setState.msg) // apple

    }

    this.setState(对象形式,回调)

       console.log('修改数据为lemon');

       this.setState({

           msg: 'lemon'

       },()=>{

           console.log(this.state.msg);

       })

    this.setState(回调1,回调2)

    第一个回调中会传入prevState累加时,++要放前面

    this.setState((prevState)=>{

               // console.log(prevState.num);

               return {

                   num: ++prevState.num

               }

           },()=>{

               console.log('修改成功');

           })

    了解-ref获取原生dom

    ref的值是一个回调函数,会自动注入当前元素的dom应用场景 : 页面初始化时文本框获取焦点

    import React, { Component } from 'react';

    class App extends Component {

       handlerChange(){

       }

       //生命周期函数,组件加载完毕时 (vue的mounted)

       componentDidMount(){

           this.input.focus()

       }

       render() {

           return (

               // ref={(input)=>{ this.input = input}}

               /**

                *  ref的值是一个回调函数

                *  函数注入的参数即为当前元素的dom对象

                *  this.input = input 把当前dom对象的地址存入实例的input属性中

                */

               <input type="text" value="aaa" onChange={this.handlerChange} ref={(input)=>{ this.input = input}}></input>

            );

       }

    }

    export default App;

    相关文章

    网友评论

        本文标题:react 笔记 React 安装 和class组件

        本文链接:https://www.haomeiwen.com/subject/kblmzrtx.html