React-基础语法

2023-11-09

React-基础语法

React—搭建脚手架

安装node.JS

参考这个博客

安装React脚手架

  • npm install create-react-app -g; 全局安装react脚手架

创建项目

  • create-react-app 项目名字; 创建项目

运行项目

  • cd 创建的项目文件 进入 创建的项目文件

  • npm start 运行项目

其他命令

  • npm build 压缩,打包
  • npm test 测试
  • npm eject 暴露配置文件
    • 肯能需要npm init—初始化

使用VSCode----安装插件

基础插件

  • Chinese 简体中文
  • ESLint 检测js语法
  • ES7 React/Redux/... 语法提示(React)
  • Live Server 本地服务器

文档目录结构

  • node_modules 包安装目录
  • public 静态资源目录
  • src 项目资源目录
    • index.js 项目的入口js文件
    • index.css 项目的全局css文件
    • App.js 根组件
    • App.css 根组件样式
    • App.test.js 根测试文件
    • logo.svg logo图片
    • setupTests.js 测试文件
    • serviceWorker.js 离线服务
  • package.json 项目包管理配置文件
  • package-lock.json 配置锁定文件
  • README.md 项目说明文件
  • .gitignore git忽略文件
  • 注意:在React中,每一个js文件都是一个组件

根组件App.js—解析

  • React使用JSX语法

  • 参考博客

  • 单标签必须自封闭

<br />
// 导入react
import React from 'react';
// 导入logo图片
import logo from './logo.svg';
// 导入组件的css文件
import './App.css';


// 函数App 是一个组件(函数组件---无状态组件)
function App() {
  // 返回的是一个JSX语法的组件布局
  return (
    <div className="App">
        <img src={logo} className="App-logo" alt="logo" />
    </div>
  );
}

// 导出默认的 App组件
export default App;

组件解析

类组件(有状态组件)

  • cccs + tab键 快捷生成类组件
// 类组件     快捷键---cccs
class App extends Component {
  constructor(props) {
    // 重载属性
    super(props);
    // 状态
    this.state = {}
  }
  // 构造函数
  render() {
    // render 渲染函数
    return (
      <div>
        <h1>你好React</h1>
      </div>
    );
  }
}

// 导出

函数组件

// 函数组件使用较多
function App(props) {
  // 返回的是一个JSX语法的组件布局
  return (
    <div className="App">
        <img src={logo} className="App-logo" alt="logo" />
    </div>
  );
}

JSX语法

html布局相关

  • 只能有一个根节点—与vue一样每个组件都只能有一个根节点
 // 构造函数
  render() {
    // render 渲染函数
    return (
		// 这里只能有一个div,只能有一个根节点,与vue的一样
      <div>
        <h1>你好React</h1>
      </div>
    );
  }

css样式相关

  • 定义类名的时候使用className
  • 定义css样式的时候需要导入css文件import 'css样式文件地址'
// 导入css文件
import './App.css';
// 函数App 是一个组件
function App() {
// 返回的是一个JSX语法的组件布局
   return (
     <div className="App">
        <img src={logo} className="App-logo" alt="logo" />
     </div>
   );
}

js行为相关

  • 在一个{}中写入js语法—任何的js语法,但是只能写一句
// 类组件     快捷键---cccs
class App extends Component {
  constructor(props) {
    // 重载属性
    super(props);
    // 状态
    this.state = {
      flag : true,
      mystyle : {"fontSize" : "40px" , "color" : "red"}
    }
  }
  // 构造函数
  render() {
    // render 渲染函数
    return (
      <div>
        <h1>你好React</h1>
        <h3>{ 0.2 + 0.1 }</h3>
		// this.state.flag 是类组件调用数据的方法,跟vue的很想
        <h3>{ this.state.flag ? "真的" : "假的" }</h3>
		// 
        <h3 style={this.state.mystyle}>红色,40px</h3>
        <h3>{ 0.2 + 0.1 }</h3>
      </div>
    );
  }
}

JSX的嵌套—也是只能有一个根节点

class App extends Component {
  constructor(props) {
    // 重载属性
    super(props);
    // 状态
    this.state = {
      flag : true,
      mystyle : {"fontSize" : "40px" , "color" : "red"}
    }
  }
  // 构造函数
  render() {
    // render 渲染函数
    return (
      <div>
        <div>
          {
            <h1> 你好第一层<br/>
              <p>你好第二层<br/>
                {this.state.flag ? <p style={mystyle}>第三层</p> : ""}
              </p>
            </h1>
          }
        </div>
      </div>
    );
  }
}

JSX数组相关

数组的展开

  • JSX中,每一个html标签都是一个对象
 // 构造函数
  render() {
    let arr = [
      <h2>html</h2>,
      <h2>vue</h2>,
      <h2>react</h2>
    ];
    // render 渲染函数
    return (
      <div>
        {/* 数组 */}
        {arr} <br/>
      </div>
    );
  }

数组的映射

 // 构造函数
  render() {
    let list = ["学会前端","找工作","找对象","买个房子","结婚"];
    // render 渲染函数
    return (
      <div>
        {/* 数组映射 */}
        {list.map( (item,index) => { return <h1 key={index}>{index + 1} : {item}</h1>})
      </div>
    );
  }

组件

  • 创建components文件夹
  • 创建对应组件的文件夹
    • 创建index.js文件

函数组件—无状态组件

定义组件


// 导入组件文件
import React, { Component } from 'react'
// 函数组件
function Child() {
    return (
      <div>
        <h1>child组件</h1>
      </div>
    )
}
// 导出child组件
export default Child;

使用组件

// 导入Child组件
import Child from './components/Child'

// 使用组件
// 构造函数
render() {

// render 渲染函数
return (
  <div>
	{/* 调用组件 */}
	<Child></Child>
  </div>
);
}

类组件—有状态组件

  • imrc 快捷键可以,快捷导入components组件
  • cccs 快捷键可以,快捷创建类组件

创建组件


// 导入组件
import React, { Component } from 'react';
// 类组件
class Son extends Component {
    constructor(props) {
        super(props);
        this.state = {  };
    }
    render() {
        return (
            <div>
                <h2>Son的组件</h2>
            </div>
        );
    }
}
// 导出son组件
export default Son;

使用类组件

// 导入Son组件
import Son from './components/Son/';

// 构造函数
render() {

// render 渲染函数
return (
	  <div>
		{/* 调用son组件 */}
		<Son></Son>
	  </div>
	);
}

组件的导入简写

  • 文件的index文件可以省略
  • components文件夹里面创建index文件
  • 在components文件夹的index文件中导入components文件夹中所有的组件在全部导出
// 导入
import Son from './components/Son'
import Child from './components/Child'

// 导出
export {Son , Child}
  • 之后我们就可以在使用是,调用components中的index就行了,简单,快捷
// 导入所有组件
import {Son,Child} from "./components"
// 使用组件
正常使用就行

类组件状态—state

  • 函数组件没有state
  • state的使用与小程序的data基本一致,与vue的使用差不多

设置state

class Son extends Component {
constructor(props) {
	super(props);
	this.state = { 
		name : "momo",
		age : 18
	 };
	 // state 组件的状态 数据 (函数组件没有)
}

调用state

  • 调用时因为是构造函数的一个方法或者数据存储器
  • 所以:this.state.定义的属性
<h2>姓名:{this.state.age}</h2>

设置state

  • 设置的方法与小程序一致
  • 都需要使用:this.setState({ 需要设置的属性名字 : 设置的属性值 })
<h2>姓名:{this.state.age}</h2>
	<button onClick={ () => {
		this.setState({
			age : this.state.age+1
		})
	}}>长大了一年</button>
</div>

组件传参—父传子—props属性

  • props属性只读单项数据流
  • 一般都是父组件传递过来的
  • 如果想要更改props,可以将数据定义到组件自己的state中
  • 跟vue一样,vue虽然可以更改父组件传递的参数,但是不建议直接修改父组件的参数

函数组件

  • props.传递的数据调用

传递参数

<!-- 传递 -->
<!-- {/* 调用组件 */} -->
<Child money="100"></Child>

接收参数

// 函数组件
// props 接收所有传递过来的参数
function Child(props) {
    return (
      <div>
        <h1>child组件</h1>
		// 调用 
        <h1>{props.money}</h1>
      </div>
    )
}
/
// 或者
// 这样可以设置money的初始值为1
// 只用于函数组件
function Child(money=1) {
    return (
      <div>
        <h1>child组件</h1>
		// 调用 
        <h1>{props.money}</h1>
      </div>
    )
}

类组件—props

‘’

传递参数

<!-- {/* 调用son组件 */} -->
 <Son num="5"></Son>

接收参数

 {this.props.num}

设置默认props值


// 导入组件
import React, { Component } from 'react';

class Son extends Component {
    constructor(props) {
        super(props);
        this.state = { 
            name : "momo",
            age : 18
         };
         // state 组件的状态 数据 (函数组件没有)
         // props 组件的属性
    }
    render() {
        return (
            <div>
                <h2>Son的组件</h2>
                <h2>姓名:{this.state.name}</h2>
                <h2>姓名:{this.state.age}</h2>
                <button onClick={ () => {
                    this.setState({
                        age : this.state.age+1
                    })
                }}>长大了一年</button>
                {this.props.num}
            </div>
        );
    }
    static defaultProps = {money : 10};
}
// 导出son组件
export default Son;

子传父

  • 子组件使用props动态设置传递的参数值
 {/* 子组件给父组件传递参数fun,使用props.fun动态添加参数 */}
<h1 onClick={ () => props.fun('I Love React')}>点击触发父组件的事件</h1>
  • 父组件在子组件标签上接收传递的参数
// 这个是定义在render函数之外的
 showMsg = msg =>  {alert(msg);}
{/* 父组件接收fun,调用父组件自己的showMsg事件 */}
<Child  fun={this.showMsg}></Child>

事件

  • 事件 驼峰写法onClick, onShow
  • 响应三种写法
    • {this.show} 函数this指向当前元素
    • {this.show.bind(this,参数)} 函数this指当前的类
    • {()=>this.show(参数)} 函数this指向当前组件
  • 定义事件函数
    • show(arg){}
    • show=(arg)=>{} 函数this指向当前组件

类,样式

  • 写法基本与vue相差不大
  • {类名 : 判断条件如果是真的就添加类名否则就删除类名,不添加,...}
略	用法与vue一样,具体可参考

参考Vue的Class与Style的用法

条件渲染

  • {三目法则}
{this.state.flag ? "你好" : "hello"}
  • &&符号

Refs的使用

  • 获取dom节点元素
<!-- 定义ref -->
<div ref="inp">你好</div>

// <!-- 获取dom元素 -->
<div onClick={ () => {
	this.refs.inp.value = "我爱国家!";
}}><>

表单的双向绑定

  • 推荐使用onChange事件,onInput事件会报红
// 定义数据
 // 状态
this.state = {
  msg : "你好"
}
 {/* 双向绑定 */}
<input type="text" 
  value={this.state.msg}
  onChange={ (e) => {
	this.setState({msg : e.target.value})
  }}
/>
<p>{this.state.msg}</p>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React-基础语法 的相关文章

  • react项目按需加载报错 .libraryName is not a valid Plugin property

    babel presets react app plugins import libraryName antd style true 原配置如上会报错 libraryName is not a valid Plugin property g
  • React重新渲染的触发机制及其优化策略

    React是一个用于构建用户界面的JavaScript库 它的核心特点之一是使用虚拟DOM Virtual DOM 来实现高效的组件渲染 那组件重新渲染的机制是如何呢 基于这些机制 如果进行优化呢 虚拟DOM是一个用JavaScript对象
  • state和props的区别__react

    首先说明 state和props是每个组件都有的 其次 state可变 但props不可变 这是官网给出的说法 但实操过程中 state的确可变 但props也可以变 是不是fb搞错了 当然不是 这里的可变与不可变 说的是改变后 是否会重新
  • react的条件渲染(或者组件渲染)五种方式 --开发基础总结

    1 使用if的方式判断是否渲染某个组件 function UserGreeting props return h1 Welcome back h1 function GuestGreeting props return h1 Please
  • 对 React Hook的闭包陷阱的理解,有哪些解决方案?

    hooks中 奇怪 其实符合逻辑 的 闭包陷阱 的场景 同时 在许多 react hooks 的文章里 也能看到 useRef 的身影 那么为什么使用 useRef 又能摆脱 这个 闭包陷阱 搞清楚这些问题 将能较大的提升对 react h
  • 如何在 Ubuntu 20.04 上使用 React 前端设置 Ruby on Rails v7 项目

    作者选择了电子前沿基金会接受捐赠作为为捐款而写程序 介绍 红宝石 on Rails是一个流行的服务器端 Web 应用程序框架 它为当今网络上存在的许多流行应用程序提供支持 例如GitHub Basecamp 声云 Airbnb and Tw
  • styled-components 的用法

    用于给标签或组件添加样式 给标签或组件添加样式 import styled from styled components styled button 给button标签添加样式 const Button styled button back
  • react基础--组件通讯:props基础、子传父、父传子、兄弟组件通讯、context跨级组件、props进阶

    目录 一 props基础 1 1 概述 1 2 函数组件通讯 1 2 1 基本用法 1 2 1 对象数据传递 1 3 类组件通讯 1 4 props的特点 二 组件通讯三种方式 2 1 父传子 2 2 子传父 2 3 兄弟组件通讯 三 co
  • 【Ant Design】Form.Item创建自定义表单

    一 概述 Antd是一个非常强大的UI组件库 里面的Form表单组件也基本能满足我们大多数场景 但是也有需要自定义表单的场景 Vue2里我们使用v model 结合子组件的model属性 来实现自定义组件的双向绑定 Vue3里我们使用v m
  • 组件间样式覆盖问题--CSS Modules

    1 组件间样式覆盖问题 问题 CityList 组件的样式 会影响 Map 组件的样式 原因 在配置路由时 CityList 和 Map 组件都被导入到项目中 那么组件的样式也就被导入到项目中了 如果组件之间样式名称相同 那么一个组件中的样
  • 三、react中类组件和函数组件

    简介 本篇我们只要介绍react中类组件与函数组件两种组件的写法 两者的优缺点 同时对在我们的项目开发中该使用类组件还是函数组件进行思考分析 废话不多说进入正题 类组件 设计思路 类组件时面向对象编程的思想 在其中我们去设计类组件时使用st
  • Notion笔记搭建博客网站 - NotionNext

    NotionNext是什么 NotionNext是我在Github上开源的基于Next js框架开发的博客生成器 目的是帮助写作爱好者们通过Notion笔记快速搭建一个独立站 从而专注于写作 而不需要操心网站的维护 它将您的Notion笔记
  • React解密:React Hooks函数之useCallback和useMemo

    之所以将useCallback和useMemo放到一起 从某种意义上说 他们都是性能优化的始作俑者 他们也有很多的共性 我们先来回顾一下class组件性能优化的点 调用 setState 就会触发组件的重新渲染 无论前后 state 是否相
  • React之state、hooks性能分析

    目录 一 state 1 为什么使用setState 2 setState异步更新 3 如何获取异步的结果 4 setState一定是异步吗 5 源码分析 6 数据的合并 7 多个state的合并 二 为什么需要Hook 三 Class组件
  • react 上传文件(多选)功能入的坑

    1 这里报错是因为onChange的this指向不对 解决方法在constructor中写 this onChange this onChange bind this 或者在绑定事件的时候写 onChange this onChange b
  • umi 后台管理demo

    umi 后台管理demo umi react ts dva antd egg 有待优化 简单的前后端管理demo 接口提供增删查改 前端也有相应功能 github代码 https github com huiBuiling ql admin
  • react 父组件调用子组件的方法

    子组件中 const child forwardRef props ref gt useImperativeHandle ref gt 这里面的方法是暴露给父组件的 test console log 我是组件里的test方法 test2 t
  • hooks实践总结

    何为hooks 在React中hook是指不编写 class 的情况下使用 state 以及其他的 React 特性 而Vue3也推出了具有相同功能的组合式API 如果你用过Vue3就会知道在 setup 中你应该避免使用 this 因为h
  • reactJS 干货(reactjs 史上最详细的解析干货)

    一 State和 Props state是状态机 应该包括 那些可能被组件的事件处理器改变并触发用户界面更新的数据 譬如需要对用户输入 服务器请求或者时间变化等作出响应 不应该包括 计算所得数据 React组件 在render 里使用pro
  • 自定义hooks

    自定义传参hooks 把大多数的通用代码 或者props 抽成一个hooks 用hooks实现上下文 就不用再一一传参了 实现原理 主要是通过createContext useContext 生产 消费者模式 用于大量props一层一层传参

随机推荐

  • 【转】C++中的返回值优化

    C 中的返回值优化 在这边文章里用到了以下编译器和操作系统 大家请自行安装 uname ar Linux debian 4 9 0 3 amd64 1 SMP Debian 4 9 30 2 deb9u3 2017 08 06 x86 64
  • ABAP range 用法

    转自http www sapjx com abap range table html1 Range Table 概述 Range Table 为 SAP R 3系统标准内表的一种 结构与 Selection Table 一致 由 SIGN
  • RLE 多线程算法 c实现

    include
  • "/usr/lib/python2.7/subprocess.py", line 1343, in _execute_child raise child_exception OSError:

    在用KITTI数据时出错
  • Docker 高级篇

    文章目录 第一章 Docker复杂安装详说 1 1 安装mysql主从复制 1 2 安装redis集群 哈希槽分区进行亿级数据存储 1 2 1 相关面试题 1 2 2 集群搭建步骤 第二章 Dockerfile解析 2 1 是什么 2 2
  • 浅谈斜率优化

    DP模型 形如 f i max f j w i j quad 1 le j
  • PHP的弱类型比较

    php弱类型比较 php中其中两种比较符号 先将字符串类型转化成相同 再比较 先判断两种字符串的类型是否相等 再比较 前者为弱比较 后者为弱比较 若在某种情况下不注意利用会导致漏洞的出现 例子 攻防世界lottery 进入页面 浏览后查看
  • android studio常用快捷键设置

    android开发工具androidstudio的熟练使用是提高我们开发效率的必备条件 现对android studio使用过程中的一些小技巧进行总结 1 命名规范 android开发过程中使用java语言 对变量的命名遵循驼峰命名法 一般
  • Tracy JS 小笔记 - 数据类型, typeof,类型转换

    数据类型 原始值 引用值 原始值 不可改变的原始值 是存储在栈里面 stack 是个有底儿的箱子结构先进后出 原始值 分为五大类 Number Boolean String undefined null var a 1 我们数据的类型天生就
  • Apache Pig的一些基础概念及用法总结4(转)

    26 错误 ERROR org apache pig tools grunt Grunt ERROR 2042 Error in new logical plan Try Dpig usenewlogicalplan false 的可能原因
  • decltype和declval的用法

    1 decltype是c 11以后出现的一个新的关键字 是用来萃取表达式或者变量或者函数返回值的类型的 具体用法可以参考官网 https en cppreference com w cpp language decltype 2 declv
  • 华为-人民币转换

    java实现 题目描述 考试题目和要点 1 中文大写金额数字前应标明 人民币 字样 中文大写金额数字应用壹 贰 叁 肆 伍 陆 柒 捌 玖 拾 佰 仟 万 亿 元 角 分 零 整等字样填写 2 中文大写金额数字到 元 为止的 在 元 之后
  • xss基础知识点

    xss 1 概念 跨站脚本攻击 英文全称Cross Site Script xss攻击 通常指黑客通过 HTML注入 篡改了网页 插入了恶意的脚本 从而在用户浏览网页时 控制用户浏览器的一种攻击 常见场景 标签内的xss Xss 属性里面的
  • 安装Flutter + Android sdk + vs code运行Flutter项目(史上最详解)

    前言 Flutter开发app是基于Dart语言开发的 就好比html网页开发基于JavaScript一样 而浏览器内核都可以编译JavaScript代码 所有开发html网页不需要下载啥SDK 直接在浏览器就能运行 首先我们安装Dart语
  • python 用for i in range(10)生成列表

    这种方法叫列表解析 1 列出1 10的平方和 结果用列表存储 要求 列出1 10所有数字的平方 1 普通方法 L for i in range 1 11 L append i 2 print L 1 4 9 16 25 36 49 64 8
  • 如何实现通用分页(来看我这一篇就够了超级详细内含源码!!!)

    目录 一 页面显示分页效果 1 1分析页面展示所要展示的属性有哪些 1 2分析页面有哪些每次发送请求有哪些公共的参数 二 具体实现前端通用分页 2 1分析思路 2 2具体实现的过程 2 2 1标签助手类 2 2 2创建标签库描述文件 tld
  • QTableView获取选中行指定列的内容(新手上路)

    1 第一次用QT写东西 在tableview对象后面的函数列表里翻来翻去 找了个看起来顺眼的selectedRows来试图获取选中行的内容 然后插入到list里面 QList
  • TQ2440移植u-boot2016.11全过程记录-【5】设置从NOR FLASH启动U-BOOT

    TQ2440移植u boot2016 11 设置从NOR FLASH启动u boot gedit include configs tq2440 h 屏蔽掉宏CONFIG SKIP LOWLEVEL INIT 修改宏CONFIG SYS TE
  • ModelArts平台部署模型

    相关步骤 构建镜像 上传镜像至swr服务 模型管理建立模型 部署模型上线 调用接口 1 构建自定义镜像 基于Dockfile文件构建 文件准备及文件结构 关于深度学习中的概念 训练 train 以图像识别为例 基于一个标注好的数据集训练好了
  • React-基础语法

    React 基础语法 React 搭建脚手架 安装node JS 安装React脚手架 创建项目 运行项目 其他命令 使用VSCode 安装插件 基础插件 文档目录结构 根组件App js 解析 组件解析 类组件 有状态组件 函数组件 JS