React = 做蛋糕的基本技能(和面、烘焙、装饰) Next.js = 高级烘焙工具(自动温控烤箱、专业裱花器) // React - 你需要掌握的基础 function UserProfile({ name, age }) { const [isLoading, setIsLoading] = useState(false); return ( <div> <h1>欢迎 {name}</h1> <p>年龄: {age}</p> </div> ); } // 堆代码 duidaima.com // Next.js - 在React基础上的增强 exportdefaultfunction Home() { // 这里依然是React语法 return<UserProfile name="张三" age={25} />; }看出来了吗?Next.js并不是React的替代品,而是建立在React之上的框架。
Warning: Cannot update a component while rendering a different component因为不懂React的渲染机制,他在各种论坛找了3天才解决。如果有React基础,这就是个5分钟的问题。
// 1. 组件思维 function ProductCard({ product }) { return ( <div className="card"> <img src={product.image} alt={product.name} /> <h3>{product.name}</h3> <p>¥{product.price}</p> </div> ); } // 2. 状态管理 function Counter() { const [count, setCount] = useState(0); return ( <button onClick={() => setCount(count + 1)}> 点击次数: {count} </button> ); } // 3. 生命周期理解 function UserData() { const [user, setUser] = useState(null); useEffect(() => { // 组件加载时获取数据 fetchUserData().then(setUser); }, []); // 这个空数组很重要! return user ? <div>{user.name}</div> : <div>加载中...</div>; }学习重点:
.条件渲染和列表渲染
// 路由管理 import { BrowserRouter, Routes, Route } from'react-router-dom'; function App() { return ( <BrowserRouter> <Routes> <Route path="/" element={<Home />} /> <Route path="/about" element={<About />} /> <Route path="/products/:id" element={<ProductDetail />} /> </Routes> </BrowserRouter> ); } // Context API(状态共享) const UserContext = createContext(); function App() { const [user, setUser] = useState(null); return ( <UserContext.Provider value={{ user, setUser }}> <Header /> <MainContent /> </UserContext.Provider> ); }第三阶段:Next.js实战(建议2-4周)
// pages/index.js - 文件即路由 exportdefaultfunction Home({ products }) { return ( <div> <h1>产品列表</h1> {products.map(product => ( <ProductCard key={product.id} product={product} /> ))} </div> ); } // 服务端渲染 - 这是Next.js的强项 exportasyncfunction getServerSideProps() { const products = await fetch('http://api.example.com/products'); return { props: { products: await products.json() } }; }这时你会发现:原来Next.js的"魔法"是这样实现的!