闽公网安备 35020302035485号
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的"魔法"是这样实现的!