react-基础-01

news2024/10/6 6:59:26

vue tutorial 上的小demo 改用react 写法

属性绑定

<div className={xx}></div>

事件绑定

import React, { useState } from 'react';

export function App(props) {

  const [count, setCount] = useState(0)
  function add() {
    setCount(count + 1)
  }
  return (
    <div className='App'>
      <button onClick={add}>add {count}</button>
    </div>
  );
}

双向绑定

import React, { useState } from 'react';

export function App(props) {

  const [val, setVal ] = useState('abc')
  return (
    <div className='App'>
      <input value={val} onChange={(e) => setVal(e.target.value)}/>{ val }
    </div>
  );
}

条件渲染

import React, { useState } from 'react';

export function App(props) {
  const [awesome, setAwesome] = useState(false)

  return (
    <div className='App'>
      <button onClick={() => setAwesome(!awesome)}>toggle</button>
      {awesome ? <h1 >Vue is awesome!</h1> : <h1>Oh no 😢</h1>}
    </div>
  );
}

列表渲染

import { useState } from 'react'
let id = 0
function App() {

  const [newTodo, setNewTodo] = useState('')
  const [todos, setTodos] = useState([
    { id: id++, text: 'ss' }
  ])

  function addTodo(e) {
    e.preventDefault()
    setTodos([...todos, { id: id++, text: newTodo }])
    setNewTodo('')
  }

  function removeTodo(todo) {
    console.log(todo, todos.filter(i => i !== todo))
    setTodos(todos.filter(i => i !== todo))
  }

  return (
    <div className="App">
      <form onSubmit={addTodo}>
        <input value={newTodo} onChange={(e) => setNewTodo(e.target.value)} />
        <button>Add Todo</button>
      </form>
      <ul>{
        todos.map(i => {
          return (
            <li key={i.id}>
              {i.text}
              <button onClick={() => removeTodo(i)}>X</button>
              <input />
            </li>
          )
        })
      }
      </ul>
    </div>
  )
}

export default App

8. 计算属性

在这里插入图片描述

react没有计算属性的概念, 但是可用 useMemo替代

const compToggle = useMemo(() => toggleAll ? todos : todos.filter(i => !i.checked)) // ??
setTodos([...todos]) // 
<span className={i.checked ? 'line-trought' : ''}>{i.text}</span> 

9. 生命周期

  1. 函数组件没有声明周期

10.监听 useEffect


  useEffect(() =>{
    console.log('useEffect', count)
    console.log('useEffect', person.name) 
  }, []) // 可以添加想监听的变化. 因为监听了两个变量, 所以调用两次??

11. components 组件化

import A from 'a'
<A />

props emits slots

props 直接形参接收, 传方法的话, 子组件调用给父组件传参
父调子的话, useRef ref={}
插槽的话可以用 形参的.children 分: 纯文本, 单标签, 多标签的情况

1. 历史

react 是一个构建界面的js库

  1. 13年facebook(现名meta)开源
  2. 17年 16 (fiber时间片) (用了两年时间才加入)
  3. 19年2月 16.8发布 (hooks)
  4. 20年10月 17
  5. 22年3月 18

特点

  1. 组件化
  2. 声明式
  3. diffing算法, 虚拟DOM 增加页面更新效率

tips

  1. 样式的模块化 a.a
  2. promise穿透?
  3. umi.js next.js (react的服务端渲染框架)
  4. react Devtools 红色的表示是开发环境, 正常的颜色表示是生产环境.
  5. uuid nanoid
  6. react 跨域, 直接在package.json配置 proxy: “http://localhost:5000” 但是这只能配置一个
    自己没有的才会请求代理,
    src 下面 setupProxy.js
  7. 浏览器直接输入地址, 是get
  8. 作用域样式: styled-components
  9. 高阶函数做登录拦截. PureComponent??

脚手架创建项目

npm install -g create-react-app || yarn global add
create-react-app aa 用脚手架创建了一个叫aa
用了脚手架搭建框架: 模块化 组件化 工程化.
f
componentWillMount和componentWillUpdate这两个函数往往包含副作用,所以当使用React Fiber的时候一定要重点看这两个函数的实现。

  1. reconciliation algorithm 和解算法?
  2. M nobil prized

浏览器不支持 export default {} => node 不支持 => 基于node的webpack也不支持

HashRouter / BrowserRouter
拆分common/components/Header.js

store/index.js reducer.js 主仓库

1, 样式组件,标签styled-components


import styled from 'styled-components'
export const BookWrap = styled.div`
.box{
	background: red;
}

src/store/reducer.js
const defaultState = {
	meau: [
		{ id: '1', name: '图书管理', icon: 'book'},
		{ id: '2', name: '用户管理', icon: 'user'}
	]
}

export default (state = defaultState, action) => {
	let newState = JSON.parse(JSON.stringify(state))
	switch (action.type) {
		default: ;
		break
	}
	return newState
}

reducer.js
import { combineReducers } from 'redux'
import commonReducer from '../common/store/reducer'
export default combineReducers({
	common: commonReducer,
})

index.js
import { createStore } from 'redux'
import Reducer from 'reducer'
export default createStore(reducer,
	redux的工具代码
)

用户,分类,vip


const a = '<h1>hello</h1>'

<h1 dangerouslySetInnerHTML={{ __html: a }}></h1>

使用类就允许我们使用其它特性,例如局部状态、生命周期钩子

受控组件: input随数据变化而变化.

非受控组件: 没用value属性,真实dom控制 用ref代替id


ref={(el) => {this.username = el}}

defaultValue={this.state.username} //非受控组件,设置默认值

defaultChecked

this.refs.username//this.username.value


React.PureComponent(){ 实现简单的性能优化
}

shouldComponentUpadate(nextProps, nextState){
}

state或props变化引起render执行
类定义构造函数,必须先调用父类的构造函数super

props不能修改,state也不允许直接修改,只能做替换.

setState是异步函数,setState合并性.

this.setState((prevState)=>({

conunt: prevState.count + 1;

}, () = > { console.log(11) } )

双向数据绑定


<input value = { this.state.inputVal } onChange = { this. handleChange.bind(this) } />

handleChange(e) {

	const value = e.target.value;
	
	this.setState( () = >({
	
		inputVal: vale
	
	}))

}

动作派发,换成函数createAction,函数返回对象

事件处理,状态提升

异步处理

1. dispatch之前,做异步操作
2. 借助中间件,让redux支持异步 Middleware

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

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

相关文章

Broadcast 广播使用详解

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、Broadcast概述二、Broadcast的注册三、Broadcast的注册类型四、静态注册开机广播的实现五、动态监听亮灭屏幕广播实现六、广播的发送方法七、参考文…

【Hello mysql】 mysql的内置函数

Mysql专栏&#xff1a;Mysql 本篇博客简介&#xff1a;介绍mysql的基内置函数 mysql的内置函数 日期函数获取年月日获取时分秒获取时间戳在日期的基础上加上日期在日期的基础上减去日期计算两个日期之差创建一张表 记录生日创建一个留言表 字符串函数获取emp表的ename列的字符集…

arm学习stm32芯片学习方波启动蜂鸣器,马达,风扇

main.c #include "pwm.h" extern void printf(const char *fmt, ...); void delay_ms(int ms) {int i,j;for(i 0; i < ms;i)for (j 0; j < 1800; j); } int main() {//蜂鸣器初始化hal_pwm_beep_init1();//马达hal_pwm_motor_init1();//风扇hal_pwm_blower_…

MySQL 06 :多表查询

MySQL 05 :多表查询 加where过滤 老韩分析 1。雇员名&#xff0c;雇员工资来自emp表 2。部门的名字来自dept表 3。 需求对emp和dept查询 ename&#xff0c;sal&#xff0c;dname&#xff0c;deptno 4。 当我们需要指定显示某个表的列是&#xff0c;需要表&#xff0c; 说明 …

视频的特效效果是怎么加的?可以批量添加吗

经常逛自媒体平台的小伙伴不难发现&#xff0c;要想原创的短视频更有创造性&#xff0c;内容更丰富&#xff0c;给视频添加特效效果算是比较常用的一个方法了。今天小编要分享的可不只是单一地给视频添加特效这么简单&#xff0c;我要给大家分享如何才能快速地批量给视频素材添…

Linux 学习记录46(QT篇)

Linux 学习记录46(QT篇) 本文目录 Linux 学习记录46(QT篇)一、建立QT项目工程二、Assistant帮助文档的使用三、自动生成的文件介绍1. tempprj.pro2. mainwindow.h3. mainwindow.cpp4. main.cpp5. mainwindow.ui 四、常用类的介绍1. 信息调试类(1. qDebug(2. 输出当前界面尺寸(3…

stm32(DMA)

DMA介绍 什么是DMA&#xff1f; 令人头秃的描述&#xff1a; DMA(Direct Memory Access&#xff0c;直接存储器访问) 提供在外设与内存、存储器和存储器、外设 与外设之间的高速数据传输使用。它允许不同速度的硬件装置来沟通&#xff0c;而不需要依赖于 CPU&#xff0c;在这…

解决Anaconda第三方库下载慢

1.打开Anconda Prompt&#xff0c;进入后台 2.执行命令第一个是添加一个清华镜像&#xff0c;第二个设置在 conda 显示通道的 URL。 &#xff08;1&#xff09;conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ &#xff08;2&#xff0…

无线振动传感器之利:实现设备远程监控和管理

在现代工业生产中&#xff0c;设备的远程监控和管理对于提高生产效率和降低成本至关重要。而无线振动传感器作为一种先进的监测技术&#xff0c;能够快速实现设备的远程监控&#xff0c;提供实时的振动数据和设备健康状况&#xff0c;为企业的运维管理带来了许多优势。本文将介…

第十九章:Linux中安装MySQL

第十九章&#xff1a;Linux中安装MySQL 19.1&#xff1a;卸载MySQL 查看是否安装过MySQL # 如果你是用rpm安装&#xff0c;检查一下RPM PACKAGE rpm -qa | grep -i mysql # 检查 mysql service systemctl status mysqld.service # CentOS6和CentOS7在MySQL的使用中的区别 # 防…

React-Native学习,RN的容器Flex-Box布局

justify-content&#xff08;在RN中属性名称为&#xff1a;justifyContent&#xff09;在主轴上对齐方式 align-items&#xff08;在RN中属性名称为&#xff1a;alignItems&#xff09;在交叉轴上的对齐方式 在React Native中&#xff0c;当没有设置容器的主轴方向时&#xf…

Web-文件上传

需求 新增员工和修改员工的需求会需要上传对应的图像 先实现对应的新增需求吧 &#xff01;&#xff01;&#xff01;RequestBody,因为传参是json格式&#xff0c;还是看对应接口文档&#xff01;&#xff01;&#xff01; controller service mapper xml 对应代码 &…

Jstat命令解析

Jstat命令解析 Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”&#xff0c;它位于java的bin目录下&#xff0c;主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控&#xff0c;包括了对Heap size和垃圾回收…

单元测试与端到端测试——主要区别

目录 前言&#xff1a; 什么是单元测试&#xff1f; 单元测试生命周期 单元测试的好处 那么它有什么好处呢&#xff1f; 单元测试示例 单元测试的类型 单元测试工具 什么是端到端测试&#xff1f; 端到端测试 端到端测试的主要好处是什么&#xff1f; 端到端测试示…

Tauri 应用中发送 http 请求

最近基于 Tauri 和 React 开发一个用于 http/https 接口测试的工具 Get Tools&#xff0c;其中使用了 tauri 提供的 fetch API&#xff0c;在开发调试过程中遇到了一些权限和参数问题&#xff0c;在此记录下来。 权限配置 在 tauri 应用中&#xff0c;如果想要使用 http 或 fe…

小白到运维工程师自学之路 第四十九集 (正则表达式之grep)

一、概述 1、正则表达式&#xff08;Regular Expression&#xff0c;简称为RegExp或Regex&#xff09;是一种用于描述、匹配和操作文本的字符串模式的表达式。它提供了一种强大而灵活的方式来进行字符串的搜索、替换、提取和验证操作。 2、正则表达式可以用于各种编程语言和应…

SpringBoot第25讲:SpringBoot对TypeHandler的使用

SpringBoot第25讲&#xff1a;SpringBoot对TypeHandler的使用 本文是SpringBoot第25讲&#xff0c;SpringBoot对TypeHandler的使用&#xff0c;TypeHandler就是当SpringBoot 实体类中字段类型和数据库中字段类型不一致时进行使用。 文章目录 SpringBoot第25讲&#xff1a;Sprin…

基环树学习笔记

0.前言 只因环树学习笔只因。 如有错误欢迎指出。 1.基本概念 这名字读起来感觉有点矛盾&#xff0c;怎么可能树上面有一个环呢&#xff1f; 我们把它放到百度翻译里面看看。 顾名思义&#xff0c;基环树不是一棵树&#xff0c;而是一颗假树&#xff0c;他的定义是&#…

Acwing.861 二分图的最大匹配(匈牙利算法)

题目 给定一个二分图&#xff0c;其中左半部包含nq个点(编号1n1)&#xff0c;右半部包含ng个点(编号1n2)&#xff0c;二分图共包含m条边。 数据保证任意—条边的两个端点都不可能在同一部分中。请你求出二分图的最大匹配数。 给定一个二分图G&#xff0c;在G的一个子图M中&…

软件测试基础认知

日升时奋斗&#xff0c;日落时自省 目录 1、测试需求 2、测试用例 3、软件测试BUG 4、开发模型 4.1、软件的生命周期 4.2、瀑布模型&#xff08;waterFall Model&#xff09; 4.3、螺旋模型 4.4、 增量模型 4.4.1、增量开发 4.4.2、迭代开发 4.5、敏捷开发&#xf…