React入门教程:从安装到第一个应用——一个前测试工程师的深夜实战手记

404收集者
2025-12-16 21:36
阅读 340

大家好,我是小林,一个从测试岗转行做前端开发三年的“老新人”。现在在一家二线城市的小厂写代码,月薪从转岗前的15k涨到了22k(别笑,扣完五险一金和房租3500,其实也没剩多少)。我和老婆异地,她在杭州当老师,我在成都敲键盘,每周五晚上我坐高铁过去,周日晚上又灰溜溜回来。上周五她还吐槽我:“你抱电脑的时间比抱我还久。”

但今天不聊感情,聊聊技术——具体点,聊聊我当初怎么磕磕绊绊入坑 React 的。


一、那个让我失眠的面试题挑战

时间回到去年十月。当时我还在做自动化测试,主要用 Python + Selenium 写脚本。虽然工作稳定,但总觉得天花板太低。更扎心的是,有一次参加技术分享会,听见隔壁组的前端小哥轻描淡写地说:“React Hooks 现在谁不用啊?Class 组件早该进博物馆了。” 我坐在角落,连 Hook 是钩子还是鱼钩都分不清。

回家后,我刷 BOSS 直聘,看到一个“初级前端开发”的职位要求写着:“熟悉 React,能独立开发组件”。我点进去一看,薪资范围 18k-25k。那一刻,心里咯噔一下——比我当时的工资高不少。

于是,我决定转型。但问题来了:React 到底怎么装?怎么跑起来?

网上教程五花八门,有的说用 create-react-app,有的说直接 vite,还有的上来就教你 webpack 配置……我照着某篇高赞文章敲命令,结果终端报错:“node: command not found”。原来我连 Node.js 都没装!

那天晚上 11 点,老婆打视频过来,问我:“怎么脸色这么差?”
我说:“我在装 React,卡在第一步了。”
她笑了:“你不是天天说‘程序员最怕 Hello World 跑不起来’吗?”

是啊,Hello World 跑不起来的痛,只有经历过的人才懂


二、从零开始:我的第一行 React 代码

冷静下来后,我做了三件事:

  1. 买书:在京东下单了《React学习手册(第2版)》,花了 79 块。纸质书的好处是,翻着翻着就睡着了——但至少比刷短视频强。
  2. 看官方文档:React 官网的中文文档其实写得挺友好,尤其是新版(beta 版)把交互式练习加进去了。
  3. 动手:不看视频,不抄代码,自己一行一行敲。

安装环境(超简版)

先确保你有 Node.js(建议 16+):

node -v
npm -v

如果没有,去 nodejs.org 下载 LTS 版。

然后创建项目(现在我推荐用 Vite,快得飞起):

npm create vite@latest my-react-app -- --template react
cd my-react-app
npm install
npm run dev

浏览器打开 http://localhost:5173,看到那个旋转的 React Logo —— 恭喜,你已经击败了 50% 的初学者(包括当初的我)。


三、我的第一个应用:Todo List(但加了点私货)

很多教程让你写 Todo List,我也写了。但为了纪念我和老婆的异地生活,我给它加了个“周末倒计时”功能。

// App.jsx
import { useState } from 'react';

function App() {
  const [todos, setTodos] = useState([]);
  const [input, setInput] = useState('');

  const addTodo = () => {
    if (input.trim()) {
      setTodos([...todos, input]);
      setInput('');
    }
  };

  // 计算距离周五还有几天
  const daysUntilFriday = () => {
    const today = new Date();
    const dayOfWeek = today.getDay(); // 0=周日, 1=周一... 5=周六, 6=周日
    let diff = 5 - dayOfWeek; // 周五是5
    if (diff < 0) diff += 7;
    return diff;
  };

  return (
    <div style={{ padding: '20px', fontFamily: 'sans-serif' }}>
      <h1>小林的异地奋斗清单</h1>
      <p>距离见到老婆还有:{daysUntilFriday()} 天!❤️</p>

      <input 
        value={input} 
        onChange={(e) => setInput(e.target.value)} 
        placeholder="比如:学完React状态管理"
      />
      <button onClick={addTodo}>添加任务</button>

      <ul>
        {todos.map((todo, index) => (
          <li key={index}>{todo}</li>
        ))}
      </ul>
    </div>
  );
}

export default App;

运行效果?简单粗暴,但每次看到“距离见到老婆还有 X 天”,我就莫名有动力继续写下去。


四、GitHub 不只是代码仓库,更是简历加分项

做完这个小应用后,我把它传到了 GitHub。

为什么?因为面试官真的会看你的 GitHub

记得第一次投简历时,HR 问:“你有实际项目经验吗?”
我说:“有,在 GitHub 上。”
她回:“链接发我看看。”

那一刻,我庆幸自己没偷懒。

后来我陆续把学习过程中的小 demo 都放上去:计数器、天气查询(调用免费 API)、甚至一个模仿豆瓣电影的界面。虽然代码很糙,但至少证明你在动手

而且,GitHub 还有个隐藏好处:当你写不下去的时候,看看 star 和 fork(哪怕只有自己点的),也会觉得“我好像也不是完全没用”

我的仓库地址就不贴了(毕竟有些代码现在看想删库跑路),但强烈建议新手建个 public repo,哪怕只放一个 README.md 写上“今天学会了 useState”。


五、面试题挑战:React 入门必问的三个问题

转型过程中,我面了 7 家公司,被问到最多的问题就这三个:

  1. React 是什么?和 Vue 有什么区别?
    别背官网定义!我说:“React 是一个声明式 UI 库,用 JS 描述界面长什么样,而不是一步步操作 DOM。至于和 Vue 的区别……我觉得 React 更像乐高,自由但需要自己搭架子;Vue 像宜家家具,开箱即用但改起来费劲。”(面试官笑了,过了)

  2. useState 是同步还是异步?
    实际上是“批量更新”导致看起来异步。但在 setTimeout 里就是同步的。这个问题我答错了两次,后来专门写了一篇笔记总结。

  3. 组件通信有哪些方式?
    父子:props;子父:回调函数;跨层级:Context 或状态管理库(比如 Zustand,比 Redux 轻量多了)。

这些题,光看书不够,必须自己写、自己调试、自己踩坑


六、写给正在挣扎的你:别怕慢,怕的是不动

说实话,从测试转开发那半年,我焦虑到掉头发。白天上班写测试用例,晚上 9 点到凌晨 1 点啃 React,周末见面老婆还得哄我:“慢慢来,又不是明天就要上线 Facebook。”

但正是那些“跑不起来的代码”、“看不懂的报错”、“被拒的面试”,让我一点点积累起来。

现在回头看,React 入门最难的不是语法,而是环境配置 + 心态调整。你不需要一开始就搞懂 Fiber 架构或并发模式,你只需要让那个小方块在屏幕上动起来。


结语:技术是手段,生活才是目的

写这篇文章的时候,是周三晚上 11 点。老婆刚发消息:“这周五降温,记得带厚外套。”
我回了个“👌”,然后继续敲代码。

我知道,React 只是我职业路上的一站。未来可能还要学 TypeScript、Next.js、甚至转全栈。但我不慌了——因为我已经证明过自己能从零开始

如果你也在转型路上,或者正被第一个 React 应用卡住,请记住:

安装失败不可怕,可怕的是关掉终端后不再打开。
面试被拒不可怕,可怕的是从此觉得自己不行。

技术分享的意义,不是炫耀多厉害,而是告诉后来者:“这条路,有人走过,你可以。”

最后,祝你早日写出自己的第一个 React 应用,也祝你早日结束异地(如果有的话)。

—— 小林,于成都出租屋,2024年夏

评论 0

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝