首页 > 其他分享 >React基础及React项目

React基础及React项目

时间:2024-03-30 18:23:45浏览次数:30  
标签:return 函数 项目 基础 React state props 组件

JSX

在 React 中使用 JSX 语法(JavaScript扩展)描述用户界面,在 React 代码执行之前,Babel 会将 JSX 语法转换为标准的 JavaScript API。JSX 语法就是一种语法糖。让开发人员舒服

JSX不同于vue模板的

属性值为JavaScript表达式,属性值外面加大括号。
const element = <img src={user.avatarUrl} />;// 注意大括号外面不能加引号,JSX 会将引号当中的内容识别为字符串而不是表达式
为 JSX 标记添加类名需要使用 className
自动展开数组,循环遍历展示用map

类组件中的ref属性

使用React中的React.createRef()创建ref实例

class Input extends Component {
  constructor() {
    super()
    this.inputRef = React.createRef()
  }
  render() {
    return (
      <div>
        <input type="text" ref={this.inputRef} />
        <button onClick={() => console.log(this.inputRef.current)}> button </button>
      </div>
    )
  }
}

类组件 函数组件以及props属性

import React, { Component } from 'react';
class App extends Component {
	static defaultProps = {}//设置props的默认值
    render () {
        return <div><h4>年龄:{this.props.age}</h4></div>
    }
}

函数组件

const Person = props => {
  return (
    <div>
      <h3>姓名:{props.name}</h3>
      <h4>年龄:{props.age}</h4>
    </div>
  );
}
Person.defaultProps = {
  name: "secondary",
  age: "11"
};

props中数据不能被修改,单向数据流
通过 props.children 属性可以获取到在调用组件时填充到组件标签内部的内容

组件状态和双向数据绑定

类组件如下,在父组件中设置state,定义更改状态值的方法,通过this.setState更改组件状态,给子组件传递状态值和更改状态值的方法,子组件的值绑定上父组件传递来的状态,并在值更新时调用父组件传递过来的更改状态值的方法

class App extends Component {
  constructor () {
    this.state = {
      name: "张三"
    }
    this.nameChanged = this.nameChanged.bind(this)
  }
  nameChanged (event) {
    this.setState({name: event.target.value});
  }
  render() {
    return (
      <div>
        <div>{this.state.name}</div>
        <Person name={this.state.name} changed={this.nameChanged}/>
      </div>
    )
  }
}
const Person = props => {
	return <input type="text" value={props.name} onChange={props.changed}/>;
}

函数组件通过useState解构出状态值和更改状态值的方法const [skip, setSkip] = useState<number>(0),原理与上述同

类组件的生命周期

  • constructor()在组件被创建时调用。
  • componentDidMount() 钩子在组件输出被渲染到 DOM 之后运行。
  • componentWillUnmount() 在组件卸载及销毁之前直接调用。

context的使用

Context多个组件之间共享状态,跨层级的传递数据
使用 React.createContext() 创建一个新的 Context 对象。

const MyContext = React.createContext();
Context.Provider
Context.Provider 是一个组件,用于接收一个 value prop,该 value prop 将被传递给下层的组件。

<MyContext.Provider value={/* some value */}>
  {/* 子组件 */}
</MyContext.Provider>

Context.Consumer
Context.Consumer 是一个组件,用于订阅 Context 的变化。这个组件接收一个函数作为子组件,这个函数接收当前的 context 值作为参数。

<MyContext.Consumer>
  {value => /* 使用 value */}
</MyContext.Consumer>

useContext Hook
useContext 是一个 React Hook,用于在函数组件中订阅 Context 的变化。

const value = useContext(MyContext);

路由

npm install react-router-dom

react-router-dom@5版本的基本使用

// App.js
import React from 'react';
import { BrowserRouter as Router, Route, Link } from 'react-router-dom';
function Index() {
	return <div>首页</div>;
}
function News() {
	return <div>新闻</div>;
}
function App() {
  return (
    <Router>
      <div>
        <Link to="/index">首页</Link>
        <Link to={`/news?id=${item.id}`}>新闻</Link>
      </div>
      <div>
        <Route path="/index" component={Index}/>
        <Route path="/news/:id" component={News}/>
      </div>
    </Router>
  );
}

使用url包来读取到路由信息

路由的重定向

import { Redirect } from 'react-router-dom';

class Login extends Component {
  render() {
    if (this.state.isLogin) {
      return <Redirect to="/"/>
    }
  }
}

React Hooks对函数型组件进行增强

  • useState() 获取设置State的状态值方法和state . 参数可以是⼀个函数, 函数返回什么, 初始状态就是什么, 函数只会被调⽤⼀次, ⽤在初始值是动态值的情况 设置状态值⽅法的⽅法是异步的
  • useReducer 另一种让函数组件保存状态的方式
    image
  • useContext() 跨阶级获取组件值
  • useEffect()让函数组件获取处理副作用的能力,类似生命周期函数
useEffect(() => {}) => componentDidMount, componentDidUpdate(在组件完成更新后立即调用。在初始化时不会被调用。 当state或者props改变时触发) 
useEffect(() => {}, []) => componentDidMount 在DOM渲染完成时执行,只会执行一次 ,[]中有状态值的话在状态值变化的时候调用 
useEffect(() => () => {}) => componentWillUnMount 在{}写的js在组件卸载时执行

useEffect中的参数函数不能是异步函数,如果里面要有异步函数需要加函数自执行

  • useMemo类似于计算属性
  • memo 方法包裹函数组件使其类似于函数的纯组件(props和state不变化就不会重新渲染,props数据深层会有问题,谨慎使用)
  • useCallback的参数数组中的值发生变化时让只依赖于其值的组件渲染,并不会让全部组件渲染,提高性能。
  • useRef()函数获取组件实例
    image
  • 自定义Hook函数 ToDo

react-router-dom 路由提供的钩⼦函数

image

React+redux项目

redux用法

redux的使用步骤

<script>
    // 3. 存储默认状态
    var initialState = {
      count: 0
    }
    // 2. 创建 reducer 函数
    function reducer (state = initialState, action) {
      switch (action.type) {
        case 'increment':
          return {count: state.count + 1};
        case 'decrement':
          return {count: state.count - 1}
        default:
          return state;
      }
    }
    // 1. 创建 store 对象
    var store = Redux.createStore(reducer);

    // 4. 定义 action
    var increment = { type: 'increment' };
    var decrement = { type: 'decrement' };

    // 5. 获取按钮 给按钮添加点击事件
    document.getElementById('plus').onclick = function () {
      // 6. 触发action
      store.dispatch(increment);
    }

    document.getElementById('minus').onclick = function () {
      // 6. 触发action
      store.dispatch(decrement);
    }

    // 7. 订阅 store
    store.subscribe(() => {
      // 获取store对象中存储的状态
      // console.log(store.getState());
      document.getElementById('count').innerHTML = store.getState().count;
    })
  </script>

按钮点击之后触发action被reducer接收到然后根据action中的type类型更改了state,更改state之后触发subscribe在其中的回调函数中更改视图

标签:return,函数,项目,基础,React,state,props,组件
From: https://www.cnblogs.com/zhixy/p/18105549

相关文章

  • 【项目技术介绍篇】若依开源项目RuoYi-Cloud后端技术介绍
    作者介绍:本人笔名姑苏老陈,从事JAVA开发工作十多年了,带过大学刚毕业的实习生,也带过技术团队。最近有个朋友的表弟,马上要大学毕业了,想从事JAVA开发工作,但不知道从何处入手。于是,产生了写一个博客专栏想法,介绍当前互联网企业JAVA项目开发如何快速入门。本文收录于《30天企......
  • 【项目技术介绍篇】如何在本地运行若依项目
    作者介绍:本人笔名姑苏老陈,从事JAVA开发工作十多年了,带过大学刚毕业的实习生,也带过技术团队。最近有个朋友的表弟,马上要大学毕业了,想从事JAVA开发工作,但不知道从何处入手。于是,产生了写一个博客专栏想法,介绍当前互联网企业JAVA项目开发如何快速入门。本文收录于《30天企......
  • Java基础 UDP协议下,收发数据的代码实现
    一、发送数据步骤:1.创建DatagramSocket对象,负责利用UDP协议往外发送数据(DatagramSocket中既有发送的方法,也有接收的方法)2.把数据打包(DatagramPacket)。把所有数据放到DatagramPacket当中3.发送数据4.释放资源 代码实现:publicstaticvoidmain(String[]args)throwsE......
  • 3、Pico Robot 基础开发课程
    3.1控制板载LED灯闪烁在上一节中,我们学习了如何搭建开发环境,并实现了运行程序控制板载LED闪烁,在这一节中我们将学习这部分程序是如何实现LED控制的。一、学习目标1.学习树莓派Pico主板的引脚基本使用。2.了解如何控制板载的LED灯。二、硬件使用本次课程无需额外的硬件,直......
  • 【并发编程】线程的基础概念
    一、基础概念1.1进程与线程A什么是进程?进程是指运行中的程序。比如我们使用钉钉,浏览器,需要启动这个程序,操作系统会给这个程序分配一定的资源(占用内存资源)。什么线程?线程是CPU调度的基本单位,每个线程执行的都是某一个进程的代码的某个片段。举个栗子:房子与人比如现......
  • 记打包的2个错误-项目BotBattle
    目录记打包项目的2个错误0.概述1.spring-boot-maven-plugin版本1.1问题1.2添加版本号2.总项目2.1问题2.2核验主类2.3backendcloud修改标签记打包项目的2个错误0.概述主目录backendcloud下有3个项目backend、botrunningsystem、matchingsystem│├─backend│......
  • ObjectiveC-03-XCode的使用和基础数据类型
    本节做为Objective-C的入门课程,笔者会从零基础开始介绍这种程序设计语言的各个方面。术语ObjeC:Objective-C的简称,因为完整的名称过长,后续会经缩写来代替;项目/工程:也称工程,指的是一个App的源文件的文件夹包和结构,有时也称为工程或项目工程。项目模板:不只ObjC,用不同编程语......
  • 渗透项目1-GoldenEye
    靶机地址:https://www.vulnhub.com/entry/goldeneye-1,240/靶机难度:中等(CTF)目标:得到root权限&找到flag.txt信息收集收集目标iparp-scan-l(收集本地网络中的活跃主机的IP地址和MAC地址。)kaliarp-scan网络扫描工具扫描局域网ip地址-阿里云开发者社区(aliyun.com)......
  • AUTOSAR MCAL基础配置(实操)
    一、用EB配置工程操作流程:1、在EBTresos配置工具中新建MCAL配置工程,添加MCU和PORT模块,分别对其进行配置。2、对MCU时钟进行配置,时钟源为外部8M晶振,经过40倍倍频,再经过二分频得到160MHz的PLL输出时钟。最终得到80M内核时钟,40M总线时钟,20M的flash时钟3、在EBTresos配置......
  • 通过Vite创建Vue3项目
    目录一、下载安装node.js18版本及以上,通过node-v来查看node版本二、换淘宝镜像2.1更换镜像2.2查看镜像是否安装成功:npmconfiggetregistry三、全局安装vite: npminstall-gvite@latest 四、创建项目五、查看是否成功一、下载安装node.js18版本及以上,通过......