JS&React解构赋值

数组解构

js

// 基础:按顺序取值
const [name, age, city] = ['小明', 18, '北京']

// 跳过某个值:逗号占位
const [,, city] = ['小明', 18, '北京']  // city = '北京'

// 默认值
const [a, b = 100] = [42]  // b = 100(取不到时用默认值)

React 里的应用

js

// useState 返回数组,直接解构
const [count, setCount] = useState(0)

// 等价于:
const result   = useState(0)
const count    = result[0]
const setCount = result[1]

对象解构

js

// 基础:按属性名取值
const { name, age } = { name: '小明', age: 18 }

// 重命名:冒号换个名字
const { name: userName } = user  // userName = '小明',name 不存在

// 默认值
const { role = '访客' } = { name: '小明' }  // role = '访客'

// 嵌套解构
const { user: { name, age } } = data

React Props 就是对象解构

jsx

// 这两种写法完全等价
function Card(props) {
  return <h1>{props.title}</h1>
}

function Card({ title, desc = '暂无' }) {
  return <h1>{title}</h1>  // 更简洁
}

实战场景

js

// 处理 API 数据
const { user, posts, total } = data
const { name, age } = user

// 函数参数解构
function greet({ name, age }) {
  return `你好 ${name},你 ${age} 岁`
}

// 交换两个变量
[a, b] = [b, a]

// 数组排序时交换位置
[arr[i], arr[j]] = [arr[j], arr[i]]

数组 vs 对象解构一眼区分

js

// 数组解构 → 用 [],按位置,名字随便起
const [a, b] = [1, 2]

// 对象解构 → 用 {},按属性名,名字要对上
const { name, age } = user