与react的初定情素

在这里插入图片描述
前要:

努力打好基础才能学好它!由于我使用vue已经3年了!来学习react,所以我写的只要我自己看得懂的就行!学这我自己会与vue的语法做对比的!

目录概览

    • 基本表达式{}
    • 列表渲染
    • 条件渲染
    • 事件的绑定
    • 组件
    • useState Hook函数
    • 样式
    • classnames工具化类名控制
    • 获取DOM
    • 工具库
    • 组件通信
    • useEffect
    • 封装自定义Hook函数
    • Redux

基本表达式{}

{'aaa'}
{count}
{getName()}
{new Date().getDate()}
<div style={{ color:"red"}}>ssss</div>

列表渲染

<ul>
  {list.map(item => <li key={item.id}>{item.name}</li>)}
</ul>

条件渲染

{flag && <span>111</span>}
{flag ? <span>111</span>:<span>222</span>}
const flag = 0;
function getFlag(){
  if(flag === 0){
    return <div>111</div>
  }else if(flag === 1){
    return <div>222</div>
  }else{
    return <div>333</div>
  }
}

function App() {
  return (
    <div className="App">
      {getFlag()}
    </div>
  )
}

export default App

事件的绑定

function App() {
  const clickItem = (name,e) =>{
    console.log(e,name)
  }
  return (
    <div className="App">
      <button onClick={(e) => clickItem('参数',e)}>点击</button>
    </div>
  )
}

export default App

组件

// function Button(){
const Button = () => {
  return <button>点击</button>
}

function App() {
  return (
    <div className="App">
      <Button/>
    </div>
  )
}

export default App

useState Hook函数

import {useState} from 'react'

function App() {
  // state的视图值与setstate是相互绑定的,两个是可以自定义的
  const [state, setstate] = useState(0);
  const handeClick = () =>{
    setstate(state + 1)
  }
  return (
    <div className="App">
      <button onClick={handeClick}>{state}</button>
    </div>
  )
}

export default App

在这里插入图片描述

样式

const commstyle = {
  color:"red",
  fontSize:'10px'
}

function App() {
  return (
    <div className="App">
      <div style={{ color:"red",fontSize:'10px'}}>ssss</div>
      <div style={commstyle}>ssss</div>

      <div className="foot">ssss</div>
    </div>
  )
}

export default App

classnames工具化类名控制

npm install classnames

import className from 'classnames'

function App() {
  return (
    <div className="App">
      <div>
        {list.map(item => 
          <span
             key={item.id}
             onClick={() => hangClick(item.id)}
             className={className('nav-item',{active: type === item.type})}>
             {item.text}</span>)}
      </div>
    </div>
  )
}

export default App

获取DOM

import { useRef } from 'react'

function App() {
  const refInput = useRef(null)
  const getDome = () =>{
    console.log(refInput.current)
  }
  return (
    <div className="App">
      <input ref={refInput} type="text"></input>
      <button onClick={getDome}>获取dome</button>
    </div>
  )
}

export default App

工具库

dayjs
uuid

组件通信

// 父传子
function Son(props){
  return <div>{props.name}{props.list[0].text}</div>
}

function App() {
  const name = '111'
  const list = [{text:88},{text:2}]
  return (
    <div className="App">
      <Son
        list={list} 
        name={name}/>
    </div>
  )
}

export default App
// 子传父
import { useState } from 'react'

function Son({onSetSonMsg}){
  const sonMsg = '88888'
  return <div>
    <button onClick = { () => onSetSonMsg(sonMsg)}>点击传值</button>
  </div>
}

function App() {
  const [ msg , setMsg ] = useState('')
  const getMsg = (msg) =>{
    console.log(msg)
    setMsg(msg)
  }
  return (
    <div className = "App">
      {msg}
      <Son onSetSonMsg = {getMsg}/>
    </div>
  )
}

export default App
// "状态提升"兄弟组件之间通讯
import { useState } from 'react'

function A({onGetAName}){
  const name = '88888'
  return <div>A组件:
    <button onClick = { () => onGetAName(name)}>点击传值</button>
  </div>
}

function B({name}){
  return <div>B组件:{name}</div>
}

function App() {
  const [ name , setName] = useState('')
  const getAName = (name) =>{
    console.log(name)
    setName(name)
  }
  return (
    <div className = "App">
      <A onGetAName = {getAName}/>
      <B name = {name}/>
    </div>
  )
}

export default App
// Context机制跨层级组件通信
//App -> A -> B
import { useState,createContext, useContext } from 'react'
const MsgContext = createContext();

function A(){
  return <div>A组件:<B /> </div>
}

function B(){
  const msg = useContext(MsgContext)
  return <div>B组件:{msg}</div>
}

function App() {
  const msg = "88888"

  return (
    <div className = "App">
      <MsgContext.Provider value={msg}>
        App组件:
        <A />
      </MsgContext.Provider>
    </div>
  )
}

export default App

在这里插入图片描述

useEffect

在这里插入图片描述
没有传依赖时:组件初始渲染+组件更新时执行
传空数组时:只在初始渲染时执行一次
加特定项时:组件初始渲染+特定依赖变化时执行

import { useState,useEffect } from 'react'
const URL = "http://geek.itheima.net/v1_0/channels";

function App() {
  const [list,setList] = useState([])

  useEffect(() => {
    async function getList(){
      const res = await fetch(URL)
      const jsonRes = await res.json()
      setList(jsonRes.data.channels)
    }
    getList()
    return () => {
      //清除副作用
    }
  }, [])

  return (
    <div className = "App">
      <ul>
        {list.map(item => <li key={item.id}>{item.name}</li>)}
      </ul>
    </div>
  )
}

export default App

封装自定义Hook函数

react Hook不能在函数外部、组件外使用,不能在条件语句中使用!

import { useState } from 'react'

function useToggle() {
  const [value, setValue] = useState(true)
  const toggle = () => setValue(!value)
  return {
    value,
    toggle
  }
}

function App() {
  const {value, toggle} = useToggle()
  return (
    <div className="App">
      {value && <div>dome</div>}
      <button onClick={toggle}>点击</button>
    </div>
  )
}

export default App

Redux

vuex
在这里插入图片描述
https://www.cnblogs.com/datiangou/p/10161767.html

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux入门级常用命令学习笔记

以下命令是我跟着编程界的大佬鱼皮学习Linux时用的命令&#xff0c;我把它都记下来&#xff0c;权当作笔记&#xff0c;可供自己后期反复练习使用&#xff0c;让我们学习一下最基本的Linux命令吧。 一、Linux实战命令 在dos下 【ssh 服务器ip】可以连接服务器&#xff0c;输入…

HiddenDesktop:一款针对Cobalt Strike设计的HVNC隐藏桌面工具

关于HiddenDesktop HiddenDesktop是一款针对Cobalt Strike设计的HVNC隐藏桌面工具&#xff0c;该工具专为红队研究人员设计&#xff0c;支持通过远程桌面会话来与目标远程设备执行交互。 值得一提的是&#xff0c;该工具并没有使用到VNC协议&#xff0c;但却能够实现类似的效…

玖章算术NineData通过阿里云PolarDB产品生态集成认证

近日&#xff0c;玖章算术旗下NineData 云原生智能数据管理平台 (V1.0&#xff09;正式通过了阿里云PolarDB PostgreSQL版 (V11)产品集成认证测试&#xff0c;并获得阿里云颁发的产品生态集成认证。 测试结果表明&#xff0c;玖章算术旗下NineData数据管理平台 (V1.0&#xff…

网络安全等级保护测评规划与设计

笔者单位网络结构日益复杂&#xff0c;应用不断增多&#xff0c;使信息系统面临更多的风险。同时&#xff0c;网络攻防技术发展迅速&#xff0c;攻击的技术门槛随着自动化攻击工具的应用也在不断降低&#xff0c;勒索病毒等未知威胁也开始泛滥。基于此&#xff0c;笔者单位拟进…

Redis图形界面闪退/错误2系统找不到指定文件/windows无法启动Redis/不是内部或外部命令,也不是可运行的程序

Redis图形界面闪退/错误2系统找不到指定文件/windows无法启动Redis/不是内部或外部命令&#xff0c;也不是可运行的程序 我遇到了以上的问题。 其实&#xff0c;最重要的原因是我打开不了another redis desktop mannager&#xff0c;就是我安装了之后&#xff0c;无法打开它…

基于模型的系统工程MBSE-SysML

基于模型的系统工程MBSE MBSE是一种通过构建标准模型&#xff0c;用于支持系统需求、分析、设计、检验与确认活动&#xff0c;这些活动从概念设计阶段开始&#xff0c;贯穿整个开发过程及后续的生命周期阶段。 MBSE能带来哪些价值 需求分析阶段 需求的标准化描述&#xff1a;避…

5.1 内容管理模块 - 课程预览、提交审核

内容管理模块 - 课程预览、提交审核 文章目录 内容管理模块 - 课程预览、提交审核一、课程预览1.1 需求分析1.2 freemarker 模板引擎1.2.1 Maven 坐标1.2.2 freemaker 相关配置信息1.2.3 添加模板 1.3 测试静态页面1.3.1 部署Nginx1.3.2 解决端口问题被占用问题1.3.3 配置host文…

JVM工作原理与实战(十六):运行时数据区-Java虚拟机栈

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、运行时数据区 二、Java虚拟机栈 1.栈帧的组成 2.局部变量表 3.操作数栈 4.帧数据 总结 前言 JVM作为Java程序的运行环境&#xff0c;其负责解释和执行字节码&#xff0c;管理…

存储的基本架构

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、存储的需求背景二、自下而上存储架构总结 一、存储的需求背景 1、人的身份信息需要存储 这种信息可以用关系型数据库&#xff0c;例如mysql&#xff0c;那种表…

多线程并发与并行

&#x1f4d1;前言 本文主要是【并发与并行】——并发与并行的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每日一句&…

【JavaScript】事件监听:键盘事件

目录 一、keydown&#xff1a;按下键盘上的任意键时触发。 二、keyup&#xff1a;释放键盘上的任意键时触发。 三、keypress&#xff1a;在按下并释放能够产生字符的键时触发&#xff08;不包括功能键等&#xff09;。 四、input&#xff1a;在文本输入框或可编辑元素的内容…

基本BGP配置试验 :配置 IBGP 和 EBGP

一、预习&#xff1a; BGP&#xff1a;Border Gateway Protocol 没有精妙的算法&#xff0c;但能承载大量的路由&#xff0c;它不生产路由&#xff0c;它是路由的搬运工 使用TCP做为传输层协议&#xff0c;端口号179&#xff0c;使用触发式路由更新 1. BGP路由…

用Pytorch实现线性回归模型

目录 回顾Pytorch实现步骤1. 准备数据2. 设计模型class LinearModel代码 3. 构造损失函数和优化器4. 训练过程5. 输出和测试完整代码 练习 回顾 前面已经学习过线性模型相关的内容&#xff0c;实现线性模型的过程并没有使用到Pytorch。 这节课主要是利用Pytorch实现线性模型。…

DNS主从服务器配置

主从服务器配置&#xff1a; &#xff08;1&#xff09;完全区域传送&#xff1a;复制整个区域文件 #主DNS服务器的配置【主dns服务器的ip地址为192.168.168.129】 #编辑DNS系统配置信息&#xff08;我这里写的增加的信息&#xff0c;源文件里面有很多内容&#xff09; [root…

(超详细)4-YOLOV5改进-添加ShuffleAttention注意力机制

1、在yolov5/models下面新建一个ShuffleAttention.py文件&#xff0c;在里面放入下面的代码 代码如下&#xff1a; import numpy as np import torch from torch import nn from torch.nn import init from torch.nn.parameter import Parameterclass ShuffleAttention(nn.…

今天吃什么小游戏(基于Flask框架搭建的简单应用程序,用于随机选择午餐选项。代码分为两部分:Python部分和HTML模板部分)

今天吃什么 一个简单有趣的外卖点饭网站&#xff0c;不知道吃什么的时候&#xff0c;都可以用它自动决定你要吃的&#xff0c;包括各种烧烤、火锅、螺蛳粉、刀削面、小笼包、麦当劳等午餐全部都在内。点击开始它会随意调出不同的午餐&#xff0c;点击停止就会挑选一个你准备要吃…

小红书家居博主报价?怎么和博主合作?

小红书上各式各样的家居博主层出不穷&#xff0c;这些博主不仅为粉丝提供了家居装修的灵感&#xff0c;更为品牌带来了巨大的商业价值。 在当下家居市场竞争激烈的环境中&#xff0c;品牌与家居博主合作已成为了营销策略中的重要一环。博主们庞大的粉丝群体、丰富的内容产出以…

腾讯云服务器多少钱?2024年腾讯云服务器报价明细表

腾讯云服务器租用价格表&#xff1a;轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;2核4G5M带宽756元三年、轻量4核8G12M服务器446元一年、646元15个月&#xff0c;云服务器CVM S5实例2核2G配置280.8元一年…

区间预测 | Matlab实现LSSVM-ABKDE的最小二乘支持向量机结合自适应带宽核密度估计多变量回归区间预测

区间预测 | Matlab实现LSSVM-ABKDE的最小二乘支持向量机结合自适应带宽核密度估计多变量回归区间预测 目录 区间预测 | Matlab实现LSSVM-ABKDE的最小二乘支持向量机结合自适应带宽核密度估计多变量回归区间预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现…

【Spring 篇】SpringMVC的数据响应:编织美妙的返回乐章

在Web开发的舞台上&#xff0c;数据响应就如同一场美妙的音乐演奏&#xff0c;而SpringMVC作为这场音乐的指挥者&#xff0c;如何优雅地将数据传递给前端&#xff0c;引发了无尽的思考和探索。本篇博客将带你走进SpringMVC的数据响应世界&#xff0c;解开其中的奥秘&#xff0c…