从外包狗到React新手:我的第一个应用踩坑实录

VSCode信徒
2026-01-14 12:40
阅读 1951

上周五晚上十一点,我还在工位上跟一个祖传jQuery项目死磕。产品经理突然在钉钉上@我:“这个页面下周上线,加个实时数据看板,用React写。” 我差点一口老血喷在机械键盘上——咱公司后端用的是Springboot,前端还是JSP混着Bootstrap,现在突然要上React?而且只给五天?

但没办法啊,谁让咱是外包公司的“万金油”呢。干了四年,从PHP改Java再切到Node,现在又得捡起React。好在我平时靠ChatGPT和Claude续命,刷LeetCode准备跳槽之余,也顺手把React文档啃了几遍。既然躲不过,那就硬刚吧。

为什么非得用React?

其实我心里清楚:客户那边新招了个“技术总监”,开口闭口就是“前后端分离”、“微前端架构”。我们原来的JSP页面直接调Springboot接口,虽然糙但快。现在非要拆成纯前端项目,后端只提供API——典型的“综合”型需求:既要快,又要新,还得显得高大上。

行吧,反正我简历上也缺个React项目。搞定了说不定跳槽能多要两千块。

环境搭建:别信网上那些“一行命令搞定”的鬼话

网上教程都说 npx create-react-app my-app 就完事了。可我在公司内网环境下跑这命令,npm源被墙得妈都不认,折腾半小时才换到淘宝镜像。

更坑的是,create-react-app 默认用Webpack 5 + Babel 7,结果我本地Node版本是14(运维死活不给升),各种兼容报错。最后还是用Vite重来,速度快得飞起:

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

三秒启动开发服务器,热更新丝滑。那一刻我悟了:外包人的时间就是金钱,谁还等Webpack打包两分钟?

第一个组件:别一上来就搞Hooks全家桶

很多新手(包括我)一开始就想秀技术,useEffect、useContext、useReducer全往上堆。结果呢?代码写得自己都看不懂,改个bug改到凌晨三点。

我的建议:先写个最简单的函数组件,连状态都不用。

// src/components/HelloWorld.jsx
export default function HelloWorld() {
  return <h1>外包人,React初体验</h1>;
}

然后在 App.jsx 里引入:

import HelloWorld from './components/HelloWorld';

function App() {
  return (
    <div className="App">
      <HelloWorld />
    </div>
  );
}

跑起来,看到页面显示文字——搞定!这时候千万别急着加功能。先确认你的开发环境没问题,ESLint、Prettier配置好,Git hooks跑起来。这些基建工作在后期能省你无数时间。

调后端接口:跨域?代理走起!

我们的Springboot后端跑在 localhost:8080,React开发服务器是 localhost:5173,直接fetch肯定跨域。网上一堆教程让你改后端加CORS,但在外包项目里,后端大哥根本懒得动代码——“你们前端自己解决”。

行,那我们就用Vite的代理配置,vite.config.js 加上:

export default defineConfig({
  server: {
    proxy: {
      '/api': {
        target: 'http://localhost:8080',
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/api/, '')
      }
    }
  }
})

这样前端请求 /api/users,实际会转发到 http://localhost:8080/users,完美避开跨域。而且上线时Nginx配一下反向代理就行,不用改任何前端代码。

状态管理:别被Redux吓到

我第一次看到Redux的样板代码,真的想砸电脑。但现在React自带的 useState + useContext 已经能应付90%的场景。除非你要做大型中后台系统,否则别一上来就上Zustand或Redux Toolkit。

举个简单例子:从Springboot拿用户列表并展示。

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

function App() {
  const [users, setUsers] = useState([]);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    fetch('/api/users')
      .then(res => res.json())
      .then(data => {
        setUsers(data);
        setLoading(false);
      })
      .catch(err => {
        console.error('接口挂了!', err);
        setLoading(false);
      });
  }, []);

  if (loading) return <div>加载中...</div>;

  return (
    <ul>
      {users.map(user => (
        <li key={user.id}>{user.name}</li>
      ))}
    </ul>
  );
}

就这么简单。别整那些花里胡哨的。开发心得:能用原生Hooks解决的,就别引入第三方库。每多一个依赖,未来就多一个升级的坑。

样式怎么写?CSS Modules香得很

以前在jQuery时代,全局CSS冲突到怀疑人生。现在React组件化,我强烈推荐用CSS Modules:

/* src/components/UserList.module.css */
.userItem {
  padding: 12px;
  border-bottom: 1px solid #eee;
  transition: background 0.2s;
}

.userItem:hover {
  background: #f5f5f5;
}
// UserList.jsx
import styles from './UserList.module.css';

export default function UserList({ users }) {
  return (
    <ul>
      {users.map(user => (
        <li className={styles.userItem} key={user.id}>
          {user.name}
        </li>
      ))}
    </ul>
  );
}

样式自动局部作用域,类名还会被哈希化,完全不用担心污染。而且支持Sass、Less,按需启用就行。

浏览器兼容性?外包项目真不用太纠结

我知道有些同学会问IE11怎么办。兄弟,醒醒!2024年了,连政府项目都不要求IE了。我们最近一个银行项目,明确写了“仅支持Chrome 80+”。所以放心用现代语法,Vite默认的Babel配置已经够用。

但如果客户真提了兼容需求……建议直接加个提示页:“请使用Chrome访问”,然后报价翻倍。

调试技巧:React DevTools是神

装个浏览器插件 React Developer Tools,组件树、props、state 一目了然。比console.log高效十倍。特别是排查“为什么这个组件没更新”时,直接看props有没有变,省下无数debug时间。

另外,Vite的HMR(热模块替换)是真的快。改一行JSX,页面瞬间刷新,状态还不丢。对比以前Webpack的慢吞吞,简直是天堂。

上线部署:别忘了静态资源路径

本地跑得好好的,build完扔到Nginx上,图片404、路由404……这种事我见多了。

关键两点:

  1. vite.config.js 里设置 base: './'(如果放子目录,改成对应路径)
  2. Nginx配置要支持HTML5 History模式:
location / {
  try_files $uri $uri/ /index.html;
}

不然用户直接访问 /users 页面会404。

总结:外包人的React入门心法

这次从零搭React应用,虽然只用了三天(剩下两天在改UI细节),但收获不小。开发心得如下:

踩坑点 正确姿势
盲目用create-react-app 优先考虑Vite,快!
一上来就搞复杂状态管理 先用useState + useContext
忽略代理配置 开发阶段必须配proxy
全局CSS乱写 强制用CSS Modules
不测上线流程 build后本地serve预览

说到底,React的核心不是语法,而是组件化思维。把页面拆成小零件,每个零件只关心自己的输入输出,后端(比如我们的Springboot)只管提供干净的API。前后端各司其职,这才是“综合”解决方案该有的样子。

现在这个项目已经上线了。虽然界面丑得要死(UI设计师被砍掉了),但至少技术栈看起来“现代化”了。领导很满意,说下次投标可以吹“全栈React+Springboot架构”。

而我?继续刷我的算法题,准备跳槽。毕竟,在外包公司,学新技术从来不是为了项目,而是为了下一份工资。

评论 0

最热最新
暂无评论
VSCode信徒Lv.1
0
影响力
0
文章
0
粉丝