普通视图

发现新文章,点击刷新页面。
今天 — 2026年1月16日首页

拒绝废话!前端开发中最常用的 10 个 ES6 特性(附极简代码)

2026年1月16日 09:34

摘要:还在写冗长的传统 JS 代码吗?本文精选了 ES6+ 中最常用的 10 个特性,通过极简的代码对比,助你快速提升代码逼格与开发效率。建议收藏!

标签:#前端 #JavaScript #ES6 #Web开发 #新手入门

1. 变量声明 (let & const)

告别 var 的变量提升困扰,拥抱块级作用域。

  • let: 用于变量,可重新赋值。
  • const: 用于常量,不可重新赋值(引用的对象属性除外)。
// 旧写法
var a = 1;

// ES6
let count = 10;
const API_URL = '[https://api.com](https://api.com)';

// count = 11; // OK
// API_URL = '...'; // Error

2. 模板字符串 (Template Literals)

再也不用痛苦地用 + 号拼接字符串了。

const name = 'Jack';
const age = 18;

// 旧写法
const str = 'My name is ' + name + ' and I am ' + age + ' years old.';

// ES6
const str = `My name is ${name} and I am ${age} years old.`;

3. 箭头函数 (Arrow Functions)

语法更简洁,且自动绑定当前上下文的 this

// 旧写法
var sum = function(a, b) {
  return a + b;
};

// ES6
const sum = (a, b) => a + b; // 单行自动 return

// 配合数组方法更是绝配
[1, 2, 3].map(x => x * 2);

4. 解构赋值 (Destructuring)

从数组或对象中提取值,爽到飞起。

const user = { name: 'Alice', age: 25 };

// 旧写法
var name = user.name;
var age = user.age;

// ES6
const { name, age } = user; // 对象解构
const [first, second] = [10, 20]; // 数组解构

5. 扩展运算符 (Spread Operator ...)

数组合并、对象复制,三个点全搞定。

const arr1 = [1, 2];
const obj1 = { a: 1 };

// 数组合并
const arr2 = [...arr1, 3, 4]; // [1, 2, 3, 4]

// 对象浅拷贝/合并
const obj2 = { ...obj1, b: 2 }; // { a: 1, b: 2 }

6. 数组新方法 (Array Methods)

查找元素从未如此简单,告别 for 循环。

const arr = [1, 2, 3, 4];

// find: 返回第一个匹配的值
const found = arr.find(x => x > 2); // 3

// Array.from: 将类数组对象转为数组
const newArr = Array.from('foo'); // ["f", "o", "o"]

7. 字符串新方法 (String Methods)

判断字符串包含关系,不再需要 indexOf() !== -1

const str = 'Hello World';

// includes: 是否包含
str.includes('Hello'); // true

// startsWith / endsWith: 开头/结尾判断
str.startsWith('He'); // true
str.endsWith('ld');   // true

8. Promise (异步编程)

解决回调地狱(Callback Hell)的神器,异步操作更优雅。

// 模拟异步请求
const getData = () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => resolve('Data Loaded'), 1000);
  });
};

// 使用
getData().then(res => console.log(res));

9. 模块化 (Modules - Import/Export)

组件化开发的基础,彻底告别全局变量污染。

// lib.js (导出)
export const pi = 3.14;
export const add = (a, b) => a + b;

// main.js (导入)
import { pi, add } from './lib.js';
console.log(add(pi, 1));

10. 类 (Classes)

虽然 JS 本质是原型继承,但 Class 写法让面向对象编程(OOP)更直观。

// ES6
class Animal {
  constructor(name) {
    this.name = name;
  }
  
  speak() {
    console.log(`${this.name} makes a noise.`);
  }
}

const dog = new Animal('Doggy');
dog.speak();

总结

掌握这 10 个特性,足以应对 90% 的日常前端开发场景。ES6 不仅是语法糖,更是提升代码可读性和维护性的利器。赶紧在项目中用起来吧!

喜欢这篇文章的话,欢迎点赞、收藏、关注!

昨天以前首页

拒绝繁琐!Redux Toolkit (RTK) 极简拟人化入门指南

2026年1月14日 09:24

前言:还在为 Redux 繁琐的样板代码(Boilerplate)头秃吗?还在写无休止的 switch-caseaction types 吗?

大人,时代变了。官方现在强烈推荐使用 Redux Toolkit (RTK) 。它不仅是 Redux 的官方工具集,更是为了简化逻辑而生。今天我们不讲晦涩的源码,我们用一个**“现代化超级仓库”**的故事,带你十分钟上手 RTK。

一、 核心概念:拟人化图解 📦

想象你的 React 应用是一个巨大的 “超级物流园”

1. Store(仓库)

这是整个物流园的总基地。所有的数据(货物)都存放在这里,严禁外人随意进出拿取,必须按规矩办事。

2. Slice(片区/部门)

仓库太大,必须分区分片管理。比如“计数器区”、“用户信息区”。每个片区都有自己的**“管理员手册”“初始库存”**。

3. State(库存)

片区里存放的具体数据。比如计数器区的当前数字是 0,这就是库存。

4. Reducer(管理员/规则制定者)

这是片区里的执行规则

  • 拟人化:管理员手里拿着一本手册,上面写着:“如果收到‘加一’的指令,就把库存 +1”。
  • RTK的魔法:在 RTK 里,管理员可以直接“修改”库存(底层由 Immer 库处理不可变性),你感觉你在直接改数据,其实 RTK 帮你处理了复杂的脏活累活。

5. Dispatch(传令兵)

组件(页面)想修改数据,不能自己动手,必须派传令兵把指令(Action)送给管理员。

6. Selector(监控探头)

组件想看数据,不需要把整个仓库搬走,只需要通过监控探头看一眼自己关心的那个数据。

二、 代码实战:三步搭建“计数器部门” 🛠️

我们要实现的功能很简单:一个计数器,能加、能减、能重置。

第一步:建立片区与制定规则 (counterSlice.js)

我们需要创建一个“计数器部门”,并制定几条铁律。

import { createSlice } from '@reduxjs/toolkit';

// 1. 初始库存:最开始是 0
const initialState = {
  value: 0,
};

// 2. 创建片区 (createSlice)
export const counterSlice = createSlice({
  name: 'counter', // 片区名字:计数器部
  initialState,
  // 3. 管理员手册 (Reducers):制定规则
  reducers: {
    // 规则一:增量
    increment: (state) => {
      // 拟人化:管理员直接把库存改了 (RTK 允许这样写,不用写 return { ...state })
      state.value += 1; 
    },
    // 规则二:减量
    decrement: (state) => {
      state.value -= 1;
    },
    // 规则三:自定义数量 (接收一个指令包 action)
    incrementByAmount: (state, action) => {
      // action.payload 就是传令兵带来的具体数字
      state.value += action.payload;
    },
  },
});

// 4. 导出指令 (Actions)
// RTK 自动帮我们把 increment 等规则生成了对应的指令牌,组件直接拿去用
export const { increment, decrement, incrementByAmount } = counterSlice.actions;

// 5. 导出这个片区的管理员 (Reducer),总仓库要用
export default counterSlice.reducer;

第二步:组建总仓库 (store.js)

现在把“计数器部门”接入到“总基地”里。

import { configureStore } from '@reduxjs/toolkit';
import counterReducer from './counterSlice';

// 创建总仓库
export const store = configureStore({
  reducer: {
    // 这里的 key ('counter') 就是在总仓库里的片区门牌号
    counter: counterReducer,
  },
});

第三步:让应用接入仓库 (index.jsmain.jsx)

在应用的入口,把仓库的大门打开,让所有组件都能连接进来。

import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import { store } from './store'; // 引入总仓库
import { Provider } from 'react-redux'; // 引入连接器

ReactDOM.createRoot(document.getElementById('root')).render(
  // 用 Provider 包裹 App,把 store 传进去
  <Provider store={store}>
    <App />
  </Provider>
);

三、 组件使用:派单与查看 📱

现在来到 React 组件内部,作为用户(User),我们如何与仓库交互?

  • useSelector: 查看库存(读数据)。
  • useDispatch: 雇佣传令兵(改数据)。
import React from 'react';
import { useSelector, useDispatch } from 'react-redux';
// 引入我们刚才生成的指令牌
import { increment, decrement, incrementByAmount } from './counterSlice';

export function Counter() {
  // 1. 查看监控:只关心 counter 片区的 value 值
  const count = useSelector((state) => state.counter.value);
  
  // 2. 雇佣传令兵
  const dispatch = useDispatch();

  return (
    <div>
      <h1>当前库存: {count}</h1>
      
      <div className="card">
        {/* 派发“增加”指令 */}
        <button onClick={() => dispatch(increment())}>
          进货 (+1)
        </button>

        {/* 派发“减少”指令 */}
        <button onClick={() => dispatch(decrement())}>
          出货 (-1)
        </button>

        {/* 派发“自定义”指令,带上参数 10 */}
        <button onClick={() => dispatch(incrementByAmount(10))}>
           大批量进货 (+10)
        </button>
      </div>
    </div>
  );
}

四、 总结:RTK 到底爽在哪? 🎉

回顾一下,使用 Redux Toolkit 相比老旧的 Redux,我们省去了什么:

  1. 不再需要 手动定义 ACTION_TYPES 常量字符串(比如 'INCREMENT')。
  2. 不再需要 写冗长的 switch...case 语句。
  3. 不再需要 手动做不可变更新(return { ...state, value: state.value + 1 }),直接 state.value += 1 即可,Immer 库在底层为你保驾护航。
  4. 不再需要 复杂的 combineReducers 配置,configureStore 一键搞定。

一句话总结: RTK 就是把复杂的仓库管理变成了**“定义片区 -> 制定简单规则 -> 组件直接调用”**的流水线模式。

快去你的项目里试试吧!

❌
❌