首页 > 其他分享 >React基础

React基础

时间:2023-06-27 14:45:16浏览次数:28  
标签:count return 基础 React state obj useEffect const

一、React Hook(部分)
1.useEffect
useEffect 用于处理组件中的 effect,通常用于请求数据,事件处理,订阅等相关操作。
1.当 useEffect 没有第二个参数时,useEffect 会不停的调用
2.当 useEffect 第二个参数为空数组时,仅在组件挂载和卸载时调用
3.当 useEffect 第二个参数为变量时,例如[count],useEffect 会在 count 变化时调用
4.useEffect 清除,useEffect 通过 return 进行一些清除

2.useState
const [state,setState] = useState(initialState);

返回一个 state,以及更新 state 的函数。

在初始渲染期间,返回的状态 (state) 与传入的第一个参数 (initialState) 值相同。

setState 函数用于更新 state。它接收一个新的 state 值并将组件的一次重新渲染加入队列。

操作:setState(newState);

3.useReducer

const [state,dispatch] = useReducer(reducer, initialState);

useReducer 是 useState 的替代方案。它接收一个形如 (state, action) => newState 的 reducer,并返回当前的 state 以及与其配套的 dispatch 方法。

useReducer 接收两个参数:
第一个参数:reducer 函数。
第二个参数:初始化的 state。返回值为最新的 state 和 dispatch 函数(用来触发 reducer 函数,计算对应的 state)

// useState 计数器
function Counter({initialCount}) {
const [count, setCount] = useState(initialCount);
return (
<>
Count: {count}
<button onClick={() => setCount(initialCount)}>Reset
<button onClick={() => setCount(prevCount => prevCount - 1)}>-
<button onClick={() => setCount(prevCount => prevCount + 1)}>+
</>
);
}

// reducer 计数器
const initialState = {count: 0};

const reducer = (state, action) => {
switch (action.type) {
case 'increment':
return {count: state.count + 1};
case 'decrement':
return {count: state.count - 1};
default:
throw new Error();
}
};

function Counter() {
const [state, dispatch] = useReducer(reducer, initialState);
return (
<>
Count: {state.count}
<button onClick={() => dispatch({type: 'decrement'})}>-
<button onClick={() => dispatch({type: 'increment'})}>+
</>
);
}

// 返回一个 newState (newObject)
function countReducer(state, action) {
switch(action.type) {
case 'add':
return { ...state, count: state.count + 1; }
case 'sub':
return { ...state, count: state.count - 1; }
default:
return count;
}
}
//三个点(...)真名叫扩展运算符,是在ES6中新增加的内容,它可以在函数调用/数组构造时,将数组表达式或者string在语法层面展开;还可以在构造字面量对象时将对象表达式按照key-value的方式展开。

在某些场景下,useReducer 会比 useStatee适用,例如 state 逻辑较复杂且包含多个子值,或者下一个 state 依赖于之前的 state 等。并且,使用 useReducer 还能给那些会触发深更新的组件做性能优化。

const [{ state1, state2 }, setState] = useReducer(
(state: any, payload: any) => {
return {
...state,
...payload,
};
},
{ state1: false, state2: undefined }
);

操作:setState({state1: newState});
二、数据处理
1.深拷贝
深拷贝开辟一个新的栈,两个对象属完成相同,但是对应两个不同的地址,修改一个对象的属性,不会改变另一个对象的属性。
function cloneDeep(obj) {
// 1.判断是否为null 或undefined
if (typeof obj == null) return obj;
// 2.判断是否为日期Date
if (obj instanceof Date) return new Date(obj);
// 3.判断是否为正则 typeof /\d+/ === 'object'
if (obj instanceof RegExp) return new RegExp(obj);
// 4.如果不是数组或对象,返回该值
if (typeof obj !== "object") return obj;
// 接下来,要么是对象,要么是数组 可以用 new obj.constructor得到它类型的空值
let cloneObj = new obj.constructor();
for (const key in obj) {
// 递归深拷贝
cloneObj[key] = cloneDeep(obj[key]);
}
return cloneObj;
}

2.数组去重
纯数字数组去重
function uniqueArray(arr) {
return [...new Set(arr)];
}

对象数组根据对应属性进行去重
function uniqueFunc(arr, uniId) {
const map = new Map();
return arr.filter((item) => !map.has(item[uniId]) && map.set(item[uniId], 1));
}

三、CSS 选择器权重
规则:(x,y,z)
x:id 选择器的数量
y:类、伪类、属性的数量
z:元素、伪元素的数量
.container #list::before {} //(1,1,1)
.container #list a::before {} //(1,1,2)
.container .form input[type="text"] {} //(0,3,1)
.container ul a:hover {} //(0,2,2)

四、Q and A
Question
//? 位置应该怎么写才能输出为true;
var a = ?;
console.log(a1 && a2 && a==3);
Answer
var a = {
n: 1,
valueOf: function () {
return this.n++;
},
};
Analysis
的判断规则:
1.特殊类型,如 undefined == null,NaN !
NaN
2.类型相同,直接比较值
3.类型不同:均为原始类型时,转换为数字进行比较。一端为原始类型一端为对象时,对象转为原始类型后比较。对象转原始类型的过程为,先调用 valueOf(),若无法转换成原始类型,再调用 toString()

标签:count,return,基础,React,state,obj,useEffect,const
From: https://www.cnblogs.com/dirtycat/p/17508829.html

相关文章

  • C#基础 - Cancellation
    目录前言1,概览1.1Cancellation是合作性的1.2CancellationToken及其典型用法1.3CancellationToken的响应1.4一个容易搞错的点2,Cancellation的请求2.1引出CancellationTokenSource2.2CancellationTokenSource的使用2.2.1超时取消2.2.2手动取消3,Cancellation的检测3.1响应取......
  • 工业镜头基础知识
    工业镜头接口物镜的接口尺寸是有国际标准的,共有三种接口型式,即F型、C型、CS型。F型接口是通用型接口,一般适用于焦距大于25mm的镜头;而当物镜的焦距约小于25mm时,因物镜的尺寸不大,便采用C型或CS型接口。C接口:镜头与摄像机接触面至镜头焦平面距离为17.5mmCS接口:此距离为12.5mmC型......
  • 外汇天眼:了解外汇基础知识和掌握投资技巧!
    迄今为止,外汇市场是全球最大的金融市场,但对于投资者来说,这个市场充满了机遇和挑战。要想在外汇市场取得成功,首先需要了解其基础知识和掌握相应的投资技巧。今天这篇文章将为投资者详细介绍外汇市场的基本概念、交易方式和投资策略,以此帮助投资者更好地把握外汇市场的脉搏。一、外汇......
  • 数学基础
    一、线性代数基础1.1数域1.2向量空间1.3内积空间1.4Hilbert空间二、概率论基础2.1随机试验、随机事件以及概率的公理化定义2.2随机变量以及概率分布的定义2.3几种总要的概率分布三、信息论基础3.1VonNeumann熵3.2VonNeumann熵的一些特性3.3Holevo界......
  • react的函数式组件中使用ref获取到子组件的方法为undefined
    我暂时遇到了两种情况。第一种情况:useImperativeHandle函数写错useImperativeHandle的第二个参数的返回值是作为ref.current的值,但是我写箭头函数写快了,忘记返回值了。useImperativeHandle(ref,()=>{foo},[foo])//错误,这样没有返回值,所以ref.current为undefineduseImp......
  • PHP 基础知识
    目录PHP基础 2PHP代码标记 2PHP注释 2PHP语句分隔符 2PHP变量 3常量 3数据类型 4流程控制 6文件 7函数 9闭包 11常用系统函数 12错误处理 13错误显示设置 15字符串类型 17字符串相关函数 19数组 21遍历数组 22数组的相关函数 25PHP基础PHP是一种运行在服务器端的脚本语言,可以嵌入......
  • HTML Over the wire 框架 Unpoly 和 React 的使用场合比较
    Unpoly是一个轻量级的JavaScript框架,它允许您通过HTMLoverthewire的方式进行Web应用程序开发。HTMLoverthewire是一种网络通信模式,它将由服务器生成的HTML片段作为响应发送给客户端,而不是传统的JSON数据。这样,服务器端可以处理更多逻辑,而客户端可以专注于渲染和......
  • Python全栈学习 day08 基础知识补充与总结
    day08总结和考试课程目标:对第一模块“Python基础”阶段的知识点进行总结和考试,让学员更好的掌握此模块的相关知识。课程概要:代码规范知识补充阶段总结(思维导图)考试题1.代码规范程序员写代码是有规范的,不只是实现功能而已。1.1名称在Python开发过程中会创建文件夹......
  • 强化学习从基础到进阶-常见问题和面试必知必答[6]:演员-评论员算法(advantage actor-cri
    强化学习从基础到进阶-常见问题和面试必知必答[6]:演员-评论员算法(advantageactor-critic,A2C),异步A2C、与生成对抗网络的联系等详解1.核心词汇优势演员-评论员(advantageactor-critic,A2C)算法:一种改进的演员-评论员(actor-critic)算法。异步优势演员-评论员(asynchronousadvanta......
  • Python全栈学习 day2 快速上手基础语法知识
    day02快速上手课程目标:学习Python最基础的语法知识,可以用代码快速实现一些简单的功能。课程概要:初识编码(密码本)编程初体验输出初识数据类型变量注释输入条件语句1.编码(密码本)计算机中所有的数据本质上都是以0和1的组合来存储。在计算机中会将中文内存转换成0101......