React__ 一 、Reactj基础

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言


提示:以下是本篇文章正文内容,下面案例可供参考

一、创建react项目

创建项目模板

go 复制代码
// 创建通用模板或 ts模板等,官网上可查模板
create-react-app react_js
create-react-app react_ts --template typescript

文件目录

JSX基础语法

  • 基础渲染,列表,变量,条件渲染和className样式类名,style行内样式

react基础

事件绑定

useState

  • useState响应式变量设置
  • 不可直接修改a,seta设置变量a
  • 直接修改视图不会更新
js 复制代码
import './App.css';
import { useState } from 'react';

const [a,seta] = useState({
 a:'1',
})
const click = ()=>{
   seta({
   ...a,
   b:'2'
   })
}
function App() {
  return (
    <div className="App" onClick={click}>
      {a}
    </div>
  );
}

export default App;
  • 绑定表单元素

安装插件lodash js方法插件

  • js方法插件
  • lodash 更多方法可以看官网或搜索
js 复制代码
import './App.css';
import { useState } from 'react';
import _ from "lodash"

function App() {
  const [a] = useState('0')
  const b = _.clone(a)
  return (
    <div className="App">
      {a}
    </div>
  );
}

export default App;

css className封装方法

  • 可以尝试着使用,感觉有点鸡肋

useRef

  • 获取DOM元素
js 复制代码
import './App.css';
import { useEffect, useRef, useState } from 'react';
import _ from "lodash"
function App() {
  const c= useRef(null)
  useEffect(()=>{
    console.log(c.current);
  },[])
  return (
    <div 
    className="App active"
    ref={c}
    >
    </div>
  );
}

export default App;

随机数插件uuid和时间格式化插件dayjs

  • 详细方法搜索官网

    当前时间

React组件通信

父传子

  • 父组件使用属性传递
  • 子组件用porps接收值
    只能传递使用不可直接修改,使用子传父可修改

当在组件里面嵌套时,使用children获取

子传父

通过父组件自定义组件方法,在子组件调用方法传递值到这个函数

兄弟组件

使用子传父再父传子可以实现

使用 useContext和createContext实现组件传参(父级往下传,单向)

Context 主要应用场景在于很多不同层级的组件需要访问同样一些的数据。请谨慎使用,因为这会使得组件的复用性变差

  • 创建context.js
js 复制代码
import { createContext } from "react";
导出createContext为公用
export const Context =createContext()
  • app.js引入,使用组件方法Context.Provider,value传值
js 复制代码
import './App.css';
import { EventEmitter } from "events";
import Home from "./components/home";
import { Context } from "./utils/context";

// BUS
const eventsBus = new EventEmitter()

// createContext
function App() {
  const a = 'green'
  // 
    eventsBus.addListener('name',(messame,num)=>{
    console.log(messame,num);
  })
  return (
    <div 
    className="App active"
    >
      <Context.Provider value={a}>
      <Home eventsBus={eventsBus}>
        <span>12222</span>
      </Home>
      </Context.Provider>
    </div>
  );
}

export default App;
  • home 子组件引入context.js使用useContext获取值
js 复制代码
// BUS
import { Context } from "../utils/context";
import { useContext } from "react";
function Home() {
  // eventsBus.emit('name','sssssssssss',123)
  const msg = useContext(Context)
  console.log(msg,":::::::");
  return (
    <div>
      aasdasd
      {msg}
    </div>
  )
}

export default Home;

事件总线events插件

安装npm i events

js 复制代码
npm i events

创建公用的方法导出

js 复制代码
import { EventEmitter } from "events";
export const eventsBus = new EventEmitter()

app.js引入使用

eventsBus.emit创建状态传递值

第一个是参数名,后面的为值

js 复制代码
import { useEffect } from 'react';
import './App.css';

import Home from "./components/home";
// BUS
import { eventsBus } from "./utils/eventBus";

// createContext
function App() {
  useEffect(()=>{
    eventsBus.emit('name','sssssssssss',123)
  })
  return (
    <div 
    className="App active"
    >
      <Home eventsBus={eventsBus}>
        <span>12222</span>
      </Home>
    </div>
  );
}

export default App;

home.js子组件引入方法读取值,并使用

js 复制代码
// BUS
import { eventsBus } from "../utils/eventBus";
function Home() {
  eventsBus.addListener('name',(messame,num)=>{
    console.log(messame,num);
  })
  return (
    <div>
      aasdasd
    </div>
  )
}

export default Home;

useEffect 发送ajax更改DOM等操作

第二个参数不传执行一次,更新执行

传空数组,只执行一次

传依赖项,初始一次,依赖项更新时一次

useEffect return清除副作用,(常用)
所有hooks要在组件内的顶层使用

### 封装自定义Hook

创建.js文件封装hook自定义

js 复制代码
import { useState } from "react";
export function useHook(){
  const [a,seta] = useState(true)
  const toggle = ()=>seta(!a)
  return{
    a,
    toggle
  }
}

导入,解构并使用

### 运行json文件启动服务


总结

一些react基本知识,

相关推荐
你挚爱的强哥29 分钟前
✅✅✅【Vue.js】sd.js基于jQuery Ajax最新原生完整版for凯哥API版本
javascript·vue.js·jquery
y先森1 小时前
CSS3中的伸缩盒模型(弹性盒子、弹性布局)之伸缩容器、伸缩项目、主轴方向、主轴换行方式、复合属性flex-flow
前端·css·css3
前端Hardy1 小时前
纯HTML&CSS实现3D旋转地球
前端·javascript·css·3d·html
susu10830189111 小时前
vue3中父div设置display flex,2个子div重叠
前端·javascript·vue.js
IT女孩儿2 小时前
CSS查缺补漏(补充上一条)
前端·css
吃杠碰小鸡3 小时前
commitlint校验git提交信息
前端
虾球xz4 小时前
游戏引擎学习第20天
前端·学习·游戏引擎
我爱李星璇4 小时前
HTML常用表格与标签
前端·html
疯狂的沙粒4 小时前
如何在Vue项目中应用TypeScript?应该注意那些点?
前端·vue.js·typescript
小镇程序员4 小时前
vue2 src_Todolist全局总线事件版本
前端·javascript·vue.js