react扩展

简介: react扩展

setState

对象式的setState

setState是同步的,但是React改变状态的操作是异步的。

  • Demo子组件
import React, { Component } from 'react';
export default class Demo extends Component {
    state = {count:0}
    add = () => {
        const {count} = this.state;
        this.setState({count:count+1})
        console.log("慢了一拍?",this.state.count);
    }
    render() {
        return (
            <div>
                <h1>{this.state.count}</h1>
                <button onClick={this.add}>加1</button>
            </div>
        );
    }
}
实现效果(未使用setState的第二个参数-回调函数)

image.png

  • 将函数作为setState函数的第二次参数
add = () => {
      const {count} = this.state;
      this.setState({count:count+1},()=>{
          console.log("慢了一拍?",this.state.count);
      })
  }
实现效果(使用setState的第二个参数-回调函数)

image.png

总结

setState(stateChange, [callback])------对象式的setState

1.stateChange为状态改变对象(该对象可以体现出状态的更改)

2.callback是可选的回调函数, 它在状态更新完毕、界面也更新后(render调用后)才被调用

函数式的setState

add = () => {
      this.setState((state)=>{
         return  {count:state.count+1}
      })
 }
总结

setState(updater, [callback])------函数式的setState

1.updater为返回stateChange对象的函数。

2.updater可以接收到state和props。

3.callback是可选的回调函数, 它在状态更新、界面也更新后(render调用后)才被调用。

  • 总结:
    1.对象式的setState是函数式的setState的简写方式(语法糖)
    2.使用原则:
    (1).如果新状态不依赖于原状态 ===> 使用对象方式
    (2).如果新状态依赖于原状态 ===> 使用函数方式
    (3).如果需要在setState()执行后获取最新的状态数据, 要在第二个callback函数中读取

路由组件的lazyLoad

原来正常书写路由组件

路由组件全部请求

image.png

lazyLoad(现点现加载)

  1. 懒加载引入路由组件
//1.通过React的lazy函数配合import()函数动态加载路由组件 ===> 路由组件代码会被分开打包
  const Login = lazy(()=>import('@/pages/Login'))
报错?

image.png

加载组件过慢

  • 使用 <Suspense> 指定在加载得到路由打包文件前显示一个自定义loading界面
import React, { Component ,Suspense} from 'react';
  //2.通过<Suspense>指定在加载得到路由打包文件前显示一个自定义loading界面
  <Suspense fallback={<h1>loading.....</h1>}>
        <Switch>
            <Route path="/xxx" component={Xxxx}/>
            <Redirect to="/login"/>
        </Switch>
    </Suspense>
注意:fallback函数的值必须是一个“已经就位”的组件,在懒加载速度过慢的时候就先显示这个组件。

如果fallback函数的值也是懒加载方式引入的组件

  • 报错

image.png

hooks

React Hook/Hooks是什么?

(1). Hook是React 16.8.0版本增加的新特性/新语法

(2). 可以让你在函数组件中使用 state 以及其他的 React 特性

State Hook: React.useState()

基本介绍

  • 接受参数

React.useState()接受的参数就是一个状态初始值。

// count的初始值就是0
const [count,setCount] = React.useState(0);
• 解构React.useState();
const [count,setCount] = React.useState(0);
console.log(count,setCount);
结果展示

React.useState()包含一个状态值和一个更新状态的函数

这里0就是count的初始值,后面就是更新状态的函数

image.png

React底层处理

image.png

React.useState()总结

(1). State Hook让函数组件也可以有state状态, 并进行状态数据的读写操作

(2). 语法: const [xxx, setXxx] = React.useState(initValue)

(3). useState()说明:

参数: 第一次初始化指定的值在内部作缓存

返回值: 包含2个元素的数组, 第1个为内部当前状态值, 第2个为更新状态值的函数

(4). setXxx()2种写法:

setXxx(newValue): 参数为非函数值, 直接指定新的状态值, 内部用其覆盖原来的状态值

setCount(count+1)
setXxx(value => newValue): 参数为函数, 接收原本的状态值, 返回新的状态值, 内部用其覆盖原来的状态值
setCount(count => count+1)

Effect Hook: React.useEffect()

总结

(1). Effect Hook 可以让你在函数组件中执行副作用操作(用于模拟类组件中的生命周期钩子)

(2). React中的副作用操作:

发ajax请求数据获取
    设置订阅 / 启动定时器
    手动更改真实DOM
(3). 语法和说明:
useEffect(() => { 
  // 在此可以执行任何带副作用操作
  return () => { // 在组件卸载前执行
    // 在此做一些收尾工作, 比如清除定时器/取消订阅等
  }
}, [stateValue]) // 如果指定的是[], 回调函数只会在第一次render()后执行
(4). 可以把 useEffect Hook 看做如下三个函数的组合
componentDidMount()
componentDidUpdate()
componentWillUnmount()


目录
相关文章
|
11月前
|
前端开发
【React工作记录五十四】形成新数组的方式扩展运算符
【React工作记录五十四】形成新数组的方式扩展运算符
36 0
|
前端开发
#yyds干货盘点#【React工作记录五十四】形成新数组的方式扩展运算符
#yyds干货盘点#【React工作记录五十四】形成新数组的方式扩展运算符
70 0
#yyds干货盘点#【React工作记录五十四】形成新数组的方式扩展运算符
|
存储 前端开发 JavaScript
|
前端开发 JavaScript API
React 入门学习(十七)-- React 扩展
React 入门学习(十七)-- React 扩展
88 0
React 入门学习(十七)-- React 扩展
|
4天前
|
前端开发 测试技术 开发工具
探索前端框架React Hooks的优势与应用
本文将深入探讨前端框架React Hooks的优势与应用。通过分析React Hooks的特性以及实际应用案例,帮助读者更好地理解和运用这一现代化的前端开发工具。
|
1月前
|
前端开发 JavaScript UED
使用React Hooks优化前端应用性能
本文将深入探讨如何使用React Hooks来优化前端应用的性能,重点介绍Hooks在状态管理、副作用处理和组件逻辑复用方面的应用。通过本文的指导,读者将了解到如何利用React Hooks提升前端应用的响应速度和用户体验。
|
3月前
|
前端开发 开发者
探索前端框架的新趋势:React Hooks的应用与实践
本文将深入探讨前端开发中的新趋势,重点介绍React Hooks的应用与实践。通过学习和使用React Hooks,开发者可以更高效地构建可维护、可扩展的前端应用程序。本文将详细介绍React Hooks的原理、优势以及如何在实际项目中运用Hooks来提高开发效率并改善代码结构。无论你是刚入门前端开发还是经验丰富的工程师,本文都将对你有所启发。