以回调函数的形式给useState提供初始参数

news/2024/7/15 17:44:54 标签: react.js, 前端, 前端框架, javascript

useState 的参数可以有两种形式:

useState(普通的数据) => useState(0) / useState(‘abc’)

useState(回调函数) => useState(() => { return 初始值 })

回调函数的返回值就是状态的初始值

该回调函数只会触发一次

  const [list, setList] = useState(() => {
    return JSON.parse(localStorage.getItem('comments')) || comments
  })

使用 回调函数 来为 useState 初始化默认值

回调函数的返回值就是状态的初始值!

注意:该回调函数只会触发一次

该使用哪种形式?

  1. 如果状态就是一个普通的数据(比如,字符串、数字、数组等)都可以直接使用 useState(普通的数据)
  2. 如果状态是经过一些计算得到的,此时,推荐使用 useState(回调函数)
第一种:
const [list, setList] = useState(
  JSON.parse(localStorage.getItem('list')) || arr
)

可以转化为:

  const initList = JSON.parse(localStorage.getItem('list')) || comments
  const [list, setList] = useState(initList)

这种情况下,只要组件更新,此处的 localStorage 等操作就会重复执行

第二种 :

const [list, setList] = useState(() => {
  return JSON.parse(localStorage.getItem('comments')) || comments
})
  • 这种方式,因为回调函数只会执行一次,所以,此处的 localStorage 等操作代码只会执行一次

  • 在这种情况下,推荐使用第二种方式


http://www.niftyadmin.cn/n/5153700.html

相关文章

正点原子嵌入式linux驱动开发——Linux 网络设备驱动

网络驱动是linux里面驱动三巨头之一,linux下的网络功能非常强大,嵌入式linux中也常常用到网络功能。前面已经讲过了字符设备驱动和块设备驱动,本章就来学习一下linux里面的网络设备驱动。 嵌入式网络简介 嵌入式下的网络硬件接口 本次笔记…

虚幻C+++基础 day2

角色移动与视角控制 Character类与相关API 创建Character子类MainPlayer.h // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h" #include "GameFramework/Character.h" #include &q…

【C++代码】接雨水,最近的更大的元素,柱状图中的最大矩阵,单调栈--代码随想录

题目:每日温度 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。…

Python---字符串中的查找方法--index()--括号里是要获取的字符串

index()方法其功能与find()方法完全一致,唯一的区别在于当要查找的子串没有出现在字符串中时,find()方法返回-1,而index()方法则直接 报错。 find()方法相关链接:Python---字符串中的查找方法--find()--括…

系列十一、拦截器(二)#案例演示

一、案例演示 说明&#xff1a;如下案例通过springboot的方式演示拦截器是如何使用的&#xff0c;以获取Controller中的请求参数为切入点进行演示 1.1、前置准备工作 1.1.1、pom <dependencies><!-- spring-boot --><dependency><groupId>org.spring…

pinia的使用和持久化存储

一、pinia是什么&#xff1a; 1、Pinia 是 Vue.js 的轻量级状态管理库&#xff0c;是vuex的升级版&#xff0c;常见于vue3中使用。 二、pinia基本使用&#xff1a; 1、装包&#xff1a;npm i pinia。 2、在main.js中use 三、pinia持久化插件&#xff1a; pinia-plugin-pers…

矩阵等价和向量组等价的一些问题

什么是向量组&#xff1f;答&#xff1a;向量组是由若干同维数的列向量&#xff08;或同维数的行向量&#xff09;组成的集合。什么是向量组等价&#xff1f;答&#xff1a;两个向量组&#xff0c;各自拼成矩阵A和B&#xff0c;向量组等价就是三秩相等&#xff0c;即r&#xff…

centos7中多版本go安装

安装go的方式 官网下载tar.gz包安装 # 1.下载tar包 wget https://go.dev/dl/go1.18.1.linux-amd64.tar.gz # 2.解压tar包到指定路径 tar -xvf go1.18.1.linux-amd64.tar.gz -C /usr/local/go1.18 # 3.配置环境变量&#xff0c;打开 /etc/profile 文件添加以下文件每次开机时…