React:
- utilisé node JS
- pour créer le projet, utiliser Nextjs ou Vite
- Pour lancer le projet, npm run dev
- Hooks:
- 规则
- 使用use开头 useXxxx
- 只能在两个地方调用hook,组件内,其他hook内
- 保持顺序一致,不可放到if,for等逻辑语句内
- 闭包陷阱
- gestion stats:
- useState:
- example:function Counter() {
const [count, setCount] = useState(0);useEffect(() => {
document.title = `Count: ${count}`;
}, [count]);return (
<div>
<p>Count: {count}</p>
<button onClick={() => setCount(count + 1)}>Increase</button>
</div>
);
}
- example:function Counter() {
- useEffect: (在开发环境会执行两次,在生产环境执行一次)
- useEffect(() => {
// ✅ 这里是副作用逻辑,创建时候执行
return () => {
// 🔁 可选:清理函数(组件卸载或依赖更新前执行)
};
}, [依赖项(就是更新哪个参数时候运行)]);
- useEffect(() => {
- immer:
- example:
- import { useState } from ‘react’;
import { produce } from ‘immer’;function App() {
const [user, setUser] = useState({ name: ‘Tom’, age: 20 });const updateAge = () => {
setUser(produce(draft => {
draft.age += 1;
}));
};return (
<div>
<p>{user.name} – {user.age}</p>
<button onClick={updateAge}>增加年龄</button>
</div>
);
}
- import { useState } from ‘react’;
- example:
- useMemo (在计算量大的时候使用)
- import { useMemo } from ‘react’;function ExpensiveComponent({ number }) {
const squared = useMemo(() => {
console.log(‘计算 square…’);
return number * number;
}, [number]);return <div>平方值: {squared}</div>;
}
- import { useMemo } from ‘react’;function ExpensiveComponent({ number }) {
- useCallback,在依赖项变动时候运行
- const memoizedFn = useCallback(() => {
// 你的函数逻辑
}, [依赖项]);
- const memoizedFn = useCallback(() => {
- 自定义hook,避免重复使用代码
- function useMyHook() {
const [value, setValue] = useState(0);
useEffect(() => {
console.log(« value 改变了 »);
}, [value]);
return [value, setValue];
} - function useTitle(title: string) {
useEffect(() => {
document.title = title
}, [])
}
- function useMyHook() {
- 第三方hooks
- useState:
- 规则
- classNames:
- 样式名字要用驼峰写法
- 使用classname插件
- example
- import classNames from ‘classnames’;const MyComponent = ({ isActive, isDisabled }) => {
const btnClass = classNames(‘btn’, {
‘btn-active’: isActive,
‘btn-disabled’: isDisabled,
});return <button className={btnClass}>Click Me</button>;
}; - css module
- Router
- // App.js
import { BrowserRouter, Routes, Route } from ‘react-router-dom’;
import Home from ‘./pages/Home’;
import About from ‘./pages/About’;function App() {
return (
<BrowserRouter>
<Routes>
<Route path= »/ » element={<Home />} />
<Route path= »/about » element={<About />} />
</Routes>
</BrowserRouter>
);
}export default App; - tailwind css
- // App.js
- UI 组件
- Material UI
- Tailwind CSS
- Ant Design
- 表单组件:
- 后端服务
- 搭建Mock服务
- ajax: axios
- mockjs, 只能劫持xmlhttprequest,不能劫持fetch,而且上线前要注销
- 劫持服务器
- random
- craco, 用webback配置陆游
- 搭建Mock服务