@umacloud/knowledge 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (418) hide show
  1. package/00-governance/governance-capabilities.md +557 -0
  2. package/00-governance/knowledge-map.md +39 -0
  3. package/00-governance/maintenance-policy.md +76 -0
  4. package/00-governance/review-checklist.md +81 -0
  5. package/README.md +13 -0
  6. package/ai/01-standards/agent-development-complete.md +691 -0
  7. package/ai/01-standards/llm-application-complete.md +488 -0
  8. package/ai/01-standards/mlops-complete.md +798 -0
  9. package/ai/01-standards/prompt-engineering-complete.md +646 -0
  10. package/ai/01-standards/rag-architecture-complete.md +649 -0
  11. package/ai/02-playbooks/llm-evaluation-playbook.md +847 -0
  12. package/ai/03-checklists/ai-project-checklist.md +215 -0
  13. package/ai/04-antipatterns/ai-antipatterns.md +661 -0
  14. package/ai/05-cases/case-rag-production.md +147 -0
  15. package/ai/06-glossary/ai-glossary.md +162 -0
  16. package/ai/agent-evaluation-benchmark.md +53 -0
  17. package/ai/ai-agent-memory-context-management.md +41 -0
  18. package/ai/ai-cost-capacity-optimization-playbook.md +42 -0
  19. package/ai/ai-data-security-and-compliance-playbook.md +37 -0
  20. package/ai/ai-domain-index-and-checklist.md +40 -0
  21. package/ai/ai-governance-maturity-model.md +50 -0
  22. package/ai/ai-model-selection-and-routing-strategy.md +47 -0
  23. package/ai/ai-observability-and-oncall-runbook.md +52 -0
  24. package/ai/ai-rag-engineering-playbook.md +42 -0
  25. package/ai/ai-red-team-and-safety-evaluation.md +42 -0
  26. package/ai/ai-release-readiness-and-rollback-gate.md +42 -0
  27. package/ai/llm-agent-engineering-deep-dive.md +57 -0
  28. package/ai/prompt-and-tool-guardrails.md +52 -0
  29. package/api/01-standards/enterprise-api-standards.md +198 -0
  30. package/api/01-standards/rest-api-design-guide.md +63 -0
  31. package/api/02-playbooks/api-pagination-playbook.md +93 -0
  32. package/api/02-playbooks/graphql-production-playbook.md +176 -0
  33. package/api/03-checklists/api-review-checklist.md +55 -0
  34. package/api/04-antipatterns/api-antipatterns.md +112 -0
  35. package/architecture/01-standards/api-gateway-patterns.md +496 -0
  36. package/architecture/01-standards/cloud-native-patterns.md +644 -0
  37. package/architecture/01-standards/distributed-systems-patterns.md +591 -0
  38. package/architecture/01-standards/event-driven-architecture.md +595 -0
  39. package/architecture/01-standards/microservices-patterns-complete.md +968 -0
  40. package/architecture/01-standards/microservices-patterns.md +495 -0
  41. package/architecture/01-standards/system-design-interview.md +664 -0
  42. package/architecture/02-playbooks/microservices-patterns-playbook.md +137 -0
  43. package/architecture/02-playbooks/migration-playbook.md +780 -0
  44. package/architecture/02-playbooks/system-design-playbook.md +779 -0
  45. package/architecture/03-checklists/architecture-decision-checklist.md +297 -0
  46. package/architecture/04-antipatterns/architecture-antipatterns.md +417 -0
  47. package/architecture/05-cases/case-netflix-microservices.md +413 -0
  48. package/architecture/06-glossary/architecture-glossary.md +164 -0
  49. package/architecture/adr-template-and-examples.md +38 -0
  50. package/architecture/api-gateway-deep-dive.md +1291 -0
  51. package/architecture/configuration-management.md +1162 -0
  52. package/architecture/distributed-transactions.md +1220 -0
  53. package/architecture/microservices-complete.md +735 -0
  54. package/architecture/resilience-and-disaster-patterns.md +37 -0
  55. package/architecture/service-governance.md +1198 -0
  56. package/architecture/system-architecture-deep-dive.md +37 -0
  57. package/backend/01-standards/analytics-and-growth.md +65 -0
  58. package/backend/01-standards/api-and-error-conventions.md +120 -0
  59. package/backend/01-standards/application-layering-and-packaging.md +160 -0
  60. package/backend/01-standards/auth-implementation.md +104 -0
  61. package/backend/01-standards/backend-framework-idioms.md +74 -0
  62. package/backend/01-standards/background-jobs-and-async.md +66 -0
  63. package/backend/01-standards/caching-strategies-complete.md +390 -0
  64. package/backend/01-standards/config-and-observability.md +77 -0
  65. package/backend/01-standards/data-modeling-and-persistence.md +94 -0
  66. package/backend/01-standards/django-complete.md +1765 -0
  67. package/backend/01-standards/email-and-notifications.md +64 -0
  68. package/backend/01-standards/fastapi-complete.md +925 -0
  69. package/backend/01-standards/file-upload-and-storage.md +66 -0
  70. package/backend/01-standards/graphql-api-complete.md +416 -0
  71. package/backend/01-standards/llm-application-standard.md +78 -0
  72. package/backend/01-standards/message-queue-patterns.md +379 -0
  73. package/backend/01-standards/microservices-and-distributed.md +78 -0
  74. package/backend/01-standards/nestjs-complete.md +2167 -0
  75. package/backend/01-standards/payment-integration.md +80 -0
  76. package/backend/01-standards/rate-limiting-complete.md +451 -0
  77. package/backend/01-standards/realtime-and-websocket.md +65 -0
  78. package/backend/01-standards/search-and-filtering.md +64 -0
  79. package/backend/01-standards/spring-boot-complete.md +445 -0
  80. package/backend/02-playbooks/api-design-playbook.md +718 -0
  81. package/backend/02-playbooks/email-send-playbook.md +130 -0
  82. package/backend/02-playbooks/file-upload-s3-playbook.md +153 -0
  83. package/backend/02-playbooks/typescript-enterprise-playbook.md +133 -0
  84. package/backend/02-playbooks/websocket-realtime-playbook.md +154 -0
  85. package/backend/03-checklists/api-launch-checklist.md +189 -0
  86. package/backend/04-antipatterns/backend-antipatterns.md +1051 -0
  87. package/blockchain/01-standards/blockchain-basics.md +557 -0
  88. package/blockchain/01-standards/smart-contract-development.md +1315 -0
  89. package/cicd/01-standards/deployment-and-delivery-standard.md +96 -0
  90. package/cicd/01-standards/github-actions-complete.md +473 -0
  91. package/cicd/01-standards/release-and-store-submission.md +75 -0
  92. package/cicd/02-playbooks/cicd-pipeline-playbook.md +144 -0
  93. package/cicd/02-playbooks/release-management-playbook.md +605 -0
  94. package/cicd/03-checklists/pipeline-security-checklist.md +168 -0
  95. package/cicd/04-antipatterns/cicd-antipatterns.md +589 -0
  96. package/cicd/05-cases/case-deployment-automation.md +221 -0
  97. package/cicd/05-cases/case-gitops-transformation.md +212 -0
  98. package/cicd/06-glossary/cicd-glossary.md +114 -0
  99. package/cicd/cicd-blueprint-deep-dive.md +38 -0
  100. package/cicd/release-readiness-gate.md +37 -0
  101. package/cloud-native/01-standards/container-security.md +741 -0
  102. package/cloud-native/01-standards/kubernetes-complete.md +812 -0
  103. package/cloud-native/02-playbooks/api-gateway-playbook.md +155 -0
  104. package/cloud-native/02-playbooks/gitops-with-argocd.md +760 -0
  105. package/cloud-native/02-playbooks/k8s-troubleshooting-playbook.md +1942 -0
  106. package/cloud-native/02-playbooks/message-queue-playbook.md +129 -0
  107. package/cloud-native/02-playbooks/multicloud-governance.md +726 -0
  108. package/cloud-native/02-playbooks/serverless-patterns.md +788 -0
  109. package/cloud-native/02-playbooks/service-mesh-playbook.md +612 -0
  110. package/cloud-native/02-playbooks/terraform-iac-playbook.md +143 -0
  111. package/cloud-native/03-checklists/container-security-checklist.md +431 -0
  112. package/cloud-native/03-checklists/k8s-production-readiness-checklist.md +460 -0
  113. package/cloud-native/04-antipatterns/container-antipatterns.md +660 -0
  114. package/cloud-native/04-antipatterns/k8s-antipatterns.md +743 -0
  115. package/cloud-native/05-cases/case-k8s-migration.md +478 -0
  116. package/cloud-native/05-cases/case-k8s-scaling.md +642 -0
  117. package/cloud-native/05-cases/case-k8s-security-incident.md +397 -0
  118. package/cloud-native/06-glossary/cloud-native-glossary.md +337 -0
  119. package/cross-platform/01-standards/cross-platform-frameworks.md +83 -0
  120. package/cross-platform/01-standards/platform-selection-and-architecture.md +77 -0
  121. package/data/01-standards/elasticsearch-complete.md +2098 -0
  122. package/data/01-standards/postgresql-complete.md +1613 -0
  123. package/data/01-standards/redis-complete.md +1527 -0
  124. package/data/02-playbooks/database-optimization-playbook.md +403 -0
  125. package/data/02-playbooks/elasticsearch-production-playbook.md +132 -0
  126. package/data/03-checklists/database-launch-checklist.md +187 -0
  127. package/data/04-antipatterns/database-antipatterns.md +873 -0
  128. package/data/05-cases/case-database-migration.md +310 -0
  129. package/data/06-glossary/database-glossary.md +440 -0
  130. package/data/data-governance-and-modeling-deep-dive.md +39 -0
  131. package/data-engineering/01-standards/airflow-complete.md +523 -0
  132. package/data-engineering/01-standards/kafka-complete.md +1521 -0
  133. package/data-engineering/02-playbooks/spark-etl-playbook.md +496 -0
  134. package/data-engineering/03-checklists/pipeline-launch-checklist.md +194 -0
  135. package/data-engineering/04-antipatterns/data-pipeline-antipatterns.md +684 -0
  136. package/data-engineering/05-cases/case-real-time-pipeline.md +355 -0
  137. package/data-engineering/06-glossary/data-engineering-glossary.md +429 -0
  138. package/database/01-standards/database-schema-standards.md +147 -0
  139. package/database/02-playbooks/postgresql-optimization-quick.md +52 -0
  140. package/database/02-playbooks/postgresql-performance-optimization.md +58 -0
  141. package/database/02-playbooks/postgresql-production-playbook.md +146 -0
  142. package/database/02-playbooks/redis-caching-playbook.md +117 -0
  143. package/database/03-checklists/database-review-checklist.md +50 -0
  144. package/database/04-antipatterns/database-antipatterns.md +112 -0
  145. package/design/01-standards/ui-design-system-complete.md +423 -0
  146. package/design/02-playbooks/design-handoff-playbook.md +254 -0
  147. package/design/02-playbooks/design-review-playbook.md +388 -0
  148. package/design/03-checklists/design-review-checklist.md +246 -0
  149. package/design/04-antipatterns/design-antipatterns.md +378 -0
  150. package/design/05-cases/case-design-system-adoption.md +328 -0
  151. package/design/06-glossary/design-glossary.md +329 -0
  152. package/design/ui-full-lifecycle-cross-platform-playbook.md +571 -0
  153. package/design/ux-system-deep-dive.md +38 -0
  154. package/design-systems/00-craft-rules.md +71 -0
  155. package/design-systems/aesthetic-families.md +43 -0
  156. package/design-systems/anti-ai-slop.md +162 -0
  157. package/design-systems/bold-geometric.md +120 -0
  158. package/design-systems/brutalist-bold.md +103 -0
  159. package/design-systems/editorial-clean.md +109 -0
  160. package/design-systems/glass-aurora.md +108 -0
  161. package/design-systems/modern-minimal.md +145 -0
  162. package/design-systems/premium-luxury.md +106 -0
  163. package/design-systems/product-type-design-map.md +48 -0
  164. package/design-systems/soft-warm.md +123 -0
  165. package/design-systems/tech-utility.md +113 -0
  166. package/desktop/01-standards/desktop-app-standard.md +72 -0
  167. package/desktop/01-standards/desktop-design.md +71 -0
  168. package/development/00-governance/document-template.md +41 -0
  169. package/development/01-standards/api-versioning-strategies.md +432 -0
  170. package/development/01-standards/authentication-patterns-complete.md +479 -0
  171. package/development/01-standards/css-architecture-complete.md +550 -0
  172. package/development/01-standards/database-migration-strategies.md +484 -0
  173. package/development/01-standards/elasticsearch-complete.md +347 -0
  174. package/development/01-standards/git-complete.md +371 -0
  175. package/development/01-standards/golang-complete.md +1565 -0
  176. package/development/01-standards/graphql-complete.md +298 -0
  177. package/development/01-standards/javascript-bundlers-complete.md +469 -0
  178. package/development/01-standards/javascript-typescript-complete.md +528 -0
  179. package/development/01-standards/jest-complete.md +275 -0
  180. package/development/01-standards/linux-complete.md +234 -0
  181. package/development/01-standards/logging-observability-complete.md +526 -0
  182. package/development/01-standards/microservices-communication.md +502 -0
  183. package/development/01-standards/mongodb-complete.md +406 -0
  184. package/development/01-standards/oauth2-complete.md +285 -0
  185. package/development/01-standards/performance-optimization-complete.md +289 -0
  186. package/development/01-standards/playwright-complete.md +247 -0
  187. package/development/01-standards/postgresql-complete.md +456 -0
  188. package/development/01-standards/pytest-complete.md +340 -0
  189. package/development/01-standards/python-async-programming.md +902 -0
  190. package/development/01-standards/python-complete.md +956 -0
  191. package/development/01-standards/python-decorators-complete.md +799 -0
  192. package/development/01-standards/python-design-patterns.md +2854 -0
  193. package/development/01-standards/python-packaging-distribution.md +420 -0
  194. package/development/01-standards/python-testing-strategies.md +607 -0
  195. package/development/01-standards/python-web-frameworks-comparison.md +471 -0
  196. package/development/01-standards/redis-complete.md +317 -0
  197. package/development/01-standards/rest-api-complete.md +316 -0
  198. package/development/01-standards/rust-complete.md +578 -0
  199. package/development/01-standards/typescript-advanced-types.md +1513 -0
  200. package/development/01-standards/web-security-complete.md +292 -0
  201. package/development/02-playbooks/api-design-playbook.md +810 -0
  202. package/development/02-playbooks/database-migration-playbook.md +580 -0
  203. package/development/02-playbooks/debugging-playbook.md +692 -0
  204. package/development/02-playbooks/feature-delivery-playbook.md +430 -0
  205. package/development/02-playbooks/incident-hotfix-playbook.md +387 -0
  206. package/development/02-playbooks/performance-optimization-playbook.md +531 -0
  207. package/development/02-playbooks/performance-tuning-playbook.md +652 -0
  208. package/development/02-playbooks/refactor-playbook.md +403 -0
  209. package/development/02-playbooks/release-playbook.md +469 -0
  210. package/development/03-checklists/architecture-review-checklist.md +168 -0
  211. package/development/03-checklists/data-migration-checklist.md +157 -0
  212. package/development/03-checklists/oncall-handover-checklist.md +173 -0
  213. package/development/03-checklists/pr-checklist.md +158 -0
  214. package/development/03-checklists/production-readiness-checklist.md +190 -0
  215. package/development/03-checklists/release-readiness-checklist.md +154 -0
  216. package/development/03-checklists/security-review-checklist.md +182 -0
  217. package/development/04-antipatterns/api-antipatterns.md +657 -0
  218. package/development/04-antipatterns/architecture-antipatterns.md +686 -0
  219. package/development/04-antipatterns/backend-antipatterns.md +648 -0
  220. package/development/04-antipatterns/cicd-antipatterns.md +540 -0
  221. package/development/04-antipatterns/code-smell-antipatterns.md +571 -0
  222. package/development/04-antipatterns/data-antipatterns.md +658 -0
  223. package/development/04-antipatterns/database-antipatterns.md +578 -0
  224. package/development/04-antipatterns/frontend-antipatterns.md +635 -0
  225. package/development/04-antipatterns/reliability-antipatterns.md +700 -0
  226. package/development/04-antipatterns/security-antipatterns.md +747 -0
  227. package/development/05-cases/case-api-version-migration.md +428 -0
  228. package/development/05-cases/case-authorization-hardening.md +383 -0
  229. package/development/05-cases/case-bluegreen-rollback.md +466 -0
  230. package/development/05-cases/case-cache-snowball-protection.md +485 -0
  231. package/development/05-cases/case-ci-cd-pipeline.md +544 -0
  232. package/development/05-cases/case-database-scaling.md +500 -0
  233. package/development/05-cases/case-db-hotspot-optimization.md +487 -0
  234. package/development/05-cases/case-incident-mttr-reduction.md +563 -0
  235. package/development/05-cases/case-microservice-migration.md +375 -0
  236. package/development/05-cases/case-performance-optimization.md +406 -0
  237. package/development/05-cases/case-security-incident-response.md +345 -0
  238. package/development/06-glossary/full-stack-glossary.md +166 -0
  239. package/development/09-maturity/quarterly-audit-template.md +35 -0
  240. package/development/11-ui-excellence/ui-aesthetic-system.md +41 -0
  241. package/development/11-ui-excellence/ui-engineering-excellence.md +435 -0
  242. package/development/12-scenarios/development-scenarios-guide.md +565 -0
  243. package/development/13-implementation-assets/implementation-toolkit.md +282 -0
  244. package/development/13-implementation-assets/knowledge-gates-execution.md +43 -0
  245. package/development/14-full-lifecycle/software-lifecycle-gates.md +511 -0
  246. package/development/15-lifecycle-templates/project-templates-collection.md +791 -0
  247. package/development/api-contract-and-versioning-guide.md +36 -0
  248. package/development/api-governance-complete.md +43 -0
  249. package/development/backend-engineering-complete.md +43 -0
  250. package/development/code-review-quality-complete.md +43 -0
  251. package/development/concurrency-reliability-complete.md +43 -0
  252. package/development/database-engineering-complete.md +43 -0
  253. package/development/engineering-effectiveness-complete.md +43 -0
  254. package/development/engineering-standards-deep-dive.md +38 -0
  255. package/development/frontend-engineering-complete.md +43 -0
  256. package/development/performance-capacity-complete.md +43 -0
  257. package/development/refactor-migration-complete.md +42 -0
  258. package/development/refactoring-and-techdebt-playbook.md +37 -0
  259. package/development/security-in-development-complete.md +43 -0
  260. package/devops/01-standards/cicd-pipeline-complete.md +262 -0
  261. package/devops/01-standards/docker-complete.md +1490 -0
  262. package/devops/01-standards/github-actions-complete.md +337 -0
  263. package/devops/01-standards/kubernetes-complete.md +638 -0
  264. package/devops/01-standards/terraform-complete.md +2117 -0
  265. package/devops/02-playbooks/docker-compose-playbook.md +233 -0
  266. package/devops/02-playbooks/docker-k8s-production-playbook.md +186 -0
  267. package/devops/02-playbooks/docker-production-playbook.md +952 -0
  268. package/edge-iot/01-standards/edge-iot-complete.md +473 -0
  269. package/experts/architect/api-design.md +178 -0
  270. package/experts/architect/methodology.md +124 -0
  271. package/experts/architect/security.md +75 -0
  272. package/experts/backend-lead/methodology.md +216 -0
  273. package/experts/devops/methodology.md +160 -0
  274. package/experts/frontend-lead/methodology.md +178 -0
  275. package/experts/product-manager/industry/ecommerce.md +43 -0
  276. package/experts/product-manager/industry/saas.md +40 -0
  277. package/experts/product-manager/methodology.md +97 -0
  278. package/experts/qa-lead/methodology.md +123 -0
  279. package/experts/qa-lead/test-strategy.md +128 -0
  280. package/experts/uiux-designer/methodology.md +125 -0
  281. package/frontend/01-standards/accessibility-complete.md +532 -0
  282. package/frontend/01-standards/accessibility-standard.md +74 -0
  283. package/frontend/01-standards/admin-dashboard-and-crud.md +72 -0
  284. package/frontend/01-standards/design-tokens-complete.md +444 -0
  285. package/frontend/01-standards/forms-and-validation.md +77 -0
  286. package/frontend/01-standards/frontend-architecture-and-layering.md +119 -0
  287. package/frontend/01-standards/i18n-and-localization.md +65 -0
  288. package/frontend/01-standards/nextjs-complete.md +451 -0
  289. package/frontend/01-standards/react-complete.md +713 -0
  290. package/frontend/01-standards/react-hooks-complete-guide.md +1100 -0
  291. package/frontend/01-standards/react-hooks-complete.md +1171 -0
  292. package/frontend/01-standards/seo-and-web-vitals.md +77 -0
  293. package/frontend/01-standards/state-management-complete.md +444 -0
  294. package/frontend/01-standards/vue-complete.md +499 -0
  295. package/frontend/01-standards/vue3-complete.md +2002 -0
  296. package/frontend/01-standards/web-framework-best-practices.md +64 -0
  297. package/frontend/01-standards/web-performance-complete.md +495 -0
  298. package/frontend/02-playbooks/accessibility-a11y-playbook.md +161 -0
  299. package/frontend/02-playbooks/frontend-performance-playbook.md +707 -0
  300. package/frontend/02-playbooks/i18n-internationalization-playbook.md +120 -0
  301. package/frontend/02-playbooks/performance-optimization-playbook.md +163 -0
  302. package/frontend/02-playbooks/react-nextjs-production-playbook.md +167 -0
  303. package/frontend/02-playbooks/react-state-management-playbook.md +173 -0
  304. package/frontend/03-checklists/component-quality-checklist.md +166 -0
  305. package/frontend/03-checklists/frontend-launch-checklist.md +299 -0
  306. package/frontend/04-antipatterns/frontend-antipatterns.md +886 -0
  307. package/frontend/05-cases/case-performance-optimization.md +274 -0
  308. package/harmony/01-standards/harmonyos-arkts-standard.md +75 -0
  309. package/harmony/01-standards/harmonyos-design.md +65 -0
  310. package/high-quality-engineering-playbook.md +54 -0
  311. package/incident/01-standards/incident-response-complete.md +303 -0
  312. package/incident/02-playbooks/chaos-engineering-playbook.md +883 -0
  313. package/incident/02-playbooks/postmortem-playbook.md +398 -0
  314. package/incident/03-checklists/incident-readiness-checklist.md +181 -0
  315. package/incident/04-antipatterns/incident-antipatterns.md +490 -0
  316. package/incident/05-cases/case-cascade-failure.md +176 -0
  317. package/incident/06-glossary/incident-glossary.md +114 -0
  318. package/incident/postmortem-and-response-deep-dive.md +39 -0
  319. package/industries/ecommerce/ecommerce-complete.md +631 -0
  320. package/industries/education/education-complete.md +555 -0
  321. package/industries/fintech/fintech-complete.md +501 -0
  322. package/industries/gaming/gaming-complete.md +587 -0
  323. package/industries/healthcare/healthcare-complete.md +452 -0
  324. package/low-code/01-standards/low-code-complete.md +944 -0
  325. package/miniprogram/01-standards/ai-common-mistakes.md +61 -0
  326. package/miniprogram/01-standards/miniprogram-custom-navbar-capsule.md +77 -0
  327. package/miniprogram/01-standards/miniprogram-design.md +61 -0
  328. package/miniprogram/01-standards/miniprogram-standard.md +81 -0
  329. package/mobile/01-standards/android-material-design.md +70 -0
  330. package/mobile/01-standards/flutter-complete.md +384 -0
  331. package/mobile/01-standards/ios-design-hig.md +78 -0
  332. package/mobile/01-standards/mobile-app-standard.md +85 -0
  333. package/mobile/01-standards/react-native-complete.md +352 -0
  334. package/mobile/02-playbooks/mobile-cross-platform-playbook.md +175 -0
  335. package/mobile/02-playbooks/mobile-performance.md +473 -0
  336. package/mobile/03-checklists/mobile-release-checklist.md +234 -0
  337. package/mobile/04-antipatterns/mobile-antipatterns.md +798 -0
  338. package/mobile/05-cases/case-app-performance.md +500 -0
  339. package/mobile/05-cases/case-app-startup-optimization.md +218 -0
  340. package/mobile/06-glossary/mobile-glossary.md +484 -0
  341. package/observability/01-standards/observability-standards.md +103 -0
  342. package/observability/02-playbooks/prometheus-grafana-playbook.md +135 -0
  343. package/observability/02-playbooks/structured-logging-playbook.md +73 -0
  344. package/observability/03-checklists/observability-checklist.md +54 -0
  345. package/observability/04-antipatterns/observability-antipatterns.md +106 -0
  346. package/operations/01-standards/prometheus-monitoring-complete.md +1578 -0
  347. package/operations/02-playbooks/capacity-planning-playbook.md +620 -0
  348. package/operations/03-checklists/production-launch-checklist.md +365 -0
  349. package/operations/04-antipatterns/operations-antipatterns.md +664 -0
  350. package/operations/05-cases/case-sre-practices.md +581 -0
  351. package/operations/06-glossary/operations-glossary.md +120 -0
  352. package/operations/aiops-anomaly-detection.md +758 -0
  353. package/operations/capacity-planning.md +1061 -0
  354. package/operations/chaos-engineering.md +659 -0
  355. package/operations/incident-command-system.md +38 -0
  356. package/operations/observability-complete.md +442 -0
  357. package/operations/slo-sli-playbook.md +517 -0
  358. package/operations/sre-operations-deep-dive.md +39 -0
  359. package/package.json +8 -0
  360. package/performance/01-standards/performance-and-scalability.md +80 -0
  361. package/performance/01-standards/performance-standards.md +156 -0
  362. package/performance/02-playbooks/query-optimization-playbook.md +103 -0
  363. package/performance/03-checklists/performance-checklist.md +56 -0
  364. package/performance/04-antipatterns/performance-antipatterns.md +146 -0
  365. package/product/01-standards/product-management-complete.md +285 -0
  366. package/product/02-playbooks/feature-launch-playbook.md +207 -0
  367. package/product/02-playbooks/user-research-playbook.md +532 -0
  368. package/product/03-checklists/feature-launch-checklist.md +275 -0
  369. package/product/04-antipatterns/product-antipatterns.md +355 -0
  370. package/product/05-cases/case-mvp-to-scale.md +384 -0
  371. package/product/06-glossary/product-glossary.md +462 -0
  372. package/product/feature-prioritization-framework.md +40 -0
  373. package/product/kpi-and-metric-tree.md +37 -0
  374. package/product/product-discovery-and-prd-deep-dive.md +41 -0
  375. package/quantum/01-standards/quantum-complete.md +1186 -0
  376. package/security/01-standards/api-security-complete.md +511 -0
  377. package/security/01-standards/container-runtime-security.md +574 -0
  378. package/security/01-standards/data-protection-gdpr.md +543 -0
  379. package/security/01-standards/owasp-top10-complete.md +1890 -0
  380. package/security/01-standards/secure-coding-baseline.md +90 -0
  381. package/security/01-standards/supply-chain-security.md +441 -0
  382. package/security/01-standards/web-security-checklist.md +108 -0
  383. package/security/01-standards/zero-trust-architecture.md +521 -0
  384. package/security/02-playbooks/auth-sso-playbook.md +166 -0
  385. package/security/02-playbooks/incident-response-security-playbook.md +588 -0
  386. package/security/02-playbooks/owasp-api-security-playbook.md +129 -0
  387. package/security/02-playbooks/payment-integration-playbook.md +119 -0
  388. package/security/02-playbooks/penetration-testing-playbook.md +517 -0
  389. package/security/03-checklists/security-audit-checklist.md +356 -0
  390. package/security/04-antipatterns/security-coding-antipatterns.md +580 -0
  391. package/security/05-cases/case-log4shell-incident.md +537 -0
  392. package/security/05-cases/case-major-breaches.md +468 -0
  393. package/security/06-glossary/security-glossary.md +212 -0
  394. package/security/compliance-automation.md +993 -0
  395. package/security/container-security.md +680 -0
  396. package/security/devsecops-complete.md +426 -0
  397. package/security/sast-dast-sca.md +775 -0
  398. package/security/secrets-management.md +594 -0
  399. package/security/security-architecture-deep-dive.md +37 -0
  400. package/security/threat-modeling-stride-playbook.md +40 -0
  401. package/seed-templates/auth-system.md +59 -0
  402. package/seed-templates/blog-content.md +94 -0
  403. package/seed-templates/dashboard.md +89 -0
  404. package/seed-templates/docs-site.md +73 -0
  405. package/seed-templates/e-commerce.md +50 -0
  406. package/seed-templates/saas-landing.md +92 -0
  407. package/seed-templates/settings-page.md +51 -0
  408. package/testing/01-standards/test-strategy-and-layering.md +83 -0
  409. package/testing/01-standards/testing-strategy-complete.md +422 -0
  410. package/testing/01-standards/unit-testing-best-practices.md +118 -0
  411. package/testing/02-playbooks/e2e-testing-playbook.md +988 -0
  412. package/testing/02-playbooks/testing-strategy-playbook.md +126 -0
  413. package/testing/03-checklists/test-strategy-checklist.md +208 -0
  414. package/testing/04-antipatterns/testing-antipatterns.md +718 -0
  415. package/testing/05-cases/case-testing-transformation.md +300 -0
  416. package/testing/06-glossary/testing-glossary.md +110 -0
  417. package/testing/risk-based-test-matrix.md +36 -0
  418. package/testing/testing-strategy-deep-dive.md +37 -0
@@ -0,0 +1,1171 @@
1
+ ---
2
+ id: react-hooks-complete
3
+ title: React Hooks 深度指南
4
+ domain: frontend
5
+ category: 01-standards
6
+ difficulty: intermediate
7
+ tags: [complete, frontend, hooks, react, typescript, 常见陷阱, 性能优化, 最佳实践]
8
+ quality_score: 70
9
+ last_updated: 2026-06-15
10
+ ---
11
+ # React Hooks 深度指南
12
+
13
+ ## 概述
14
+
15
+ React Hooks 是 React 16.8 引入的特性,允许在函数组件中使用状态和其他 React 特性,无需编写类组件。Hooks 彻底改变了 React 开发模式,使代码更简洁、复用性更强、逻辑组织更清晰。
16
+
17
+ ### 核心优势
18
+
19
+ - **更简洁的代码**: 函数组件替代类组件,减少样板代码
20
+ - **逻辑复用**: 自定义 Hook 实现逻辑复用,避免 render props 和高阶组件的复杂性
21
+ - **更好的代码组织**: 相关逻辑聚合在一起,而非分散在生命周期方法中
22
+ - **更容易测试**: 纯函数更容易单元测试
23
+ - **更小的包体积**: 减少类组件的额外开销
24
+
25
+ ---
26
+
27
+ ## 核心 Hooks
28
+
29
+ ### 1. useState - 状态管理
30
+
31
+ `useState` 是最基础的 Hook,用于在函数组件中添加状态。
32
+
33
+ ```javascript
34
+ import React, { useState } from 'react';
35
+
36
+ function Counter() {
37
+ const [count, setCount] = useState(0);
38
+
39
+ return (
40
+ <div>
41
+ <p>Count: {count}</p>
42
+ <button onClick={() => setCount(count + 1)}>Increment</button>
43
+ <button onClick={() => setCount(prev => prev - 1)}>Decrement</button>
44
+ </div>
45
+ );
46
+ }
47
+ ```
48
+
49
+ #### 高级用法
50
+
51
+ ```javascript
52
+ // 惰性初始化 - 只在首次渲染时执行
53
+ const [state, setState] = useState(() => {
54
+ const initialState = expensiveComputation();
55
+ return initialState;
56
+ });
57
+
58
+ // 更新对象状态
59
+ const [user, setUser] = useState({ name: '', email: '' });
60
+
61
+ // 方式 1: 手动合并
62
+ setUser({ ...user, name: 'Alice' });
63
+
64
+ // 方式 2: 函数式更新
65
+ setUser(prev => ({ ...prev, name: 'Alice' }));
66
+
67
+ // 更新数组状态
68
+ const [items, setItems] = useState([]);
69
+
70
+ // 添加项
71
+ setItems([...items, newItem]);
72
+ setItems(prev => [...prev, newItem]);
73
+
74
+ // 删除项
75
+ setItems(items.filter(item => item.id !== id));
76
+
77
+ // 更新项
78
+ setItems(items.map(item =>
79
+ item.id === id ? { ...item, updated: true } : item
80
+ ));
81
+ ```
82
+
83
+ ### 2. useEffect - 副作用处理
84
+
85
+ `useEffect` 用于处理副作用,如数据获取、订阅、DOM 操作等。
86
+
87
+ ```javascript
88
+ import React, { useState, useEffect } from 'react';
89
+
90
+ function UserProfile({ userId }) {
91
+ const [user, setUser] = useState(null);
92
+
93
+ // 组件挂载时执行
94
+ useEffect(() => {
95
+ fetchUser(userId).then(data => setUser(data));
96
+ }, [userId]); // 依赖数组
97
+
98
+ if (!user) return <div>Loading...</div>;
99
+ return <div>{user.name}</div>;
100
+ }
101
+ ```
102
+
103
+ #### 依赖数组规则
104
+
105
+ ```javascript
106
+ // 1. 每次渲染后都执行
107
+ useEffect(() => {
108
+ console.log('每次渲染都执行');
109
+ });
110
+
111
+ // 2. 只在挂载时执行一次
112
+ useEffect(() => {
113
+ console.log('组件挂载');
114
+ }, []);
115
+
116
+ // 3. 依赖特定值
117
+ useEffect(() => {
118
+ console.log('userId 变化时执行');
119
+ }, [userId]);
120
+
121
+ // 4. 多个依赖
122
+ useEffect(() => {
123
+ console.log('userId 或 userName 变化时执行');
124
+ }, [userId, userName]);
125
+ ```
126
+
127
+ #### 清理副作用
128
+
129
+ ```javascript
130
+ useEffect(() => {
131
+ const subscription = props.source.subscribe();
132
+
133
+ // 返回清理函数
134
+ return () => {
135
+ subscription.unsubscribe();
136
+ };
137
+ }, [props.source]);
138
+
139
+ // 真实案例:事件监听
140
+ useEffect(() => {
141
+ const handleResize = () => {
142
+ console.log('Window resized');
143
+ };
144
+
145
+ window.addEventListener('resize', handleResize);
146
+
147
+ return () => {
148
+ window.removeEventListener('resize', handleResize);
149
+ };
150
+ }, []);
151
+
152
+ // 真实案例:定时器
153
+ useEffect(() => {
154
+ const timer = setInterval(() => {
155
+ console.log('Tick');
156
+ }, 1000);
157
+
158
+ return () => clearInterval(timer);
159
+ }, []);
160
+ ```
161
+
162
+ #### useEffect 的执行时机
163
+
164
+ ```javascript
165
+ useEffect(() => {
166
+ // 在渲染之后执行(异步)
167
+ console.log('DOM 已更新');
168
+ });
169
+
170
+ useLayoutEffect(() => {
171
+ // 在 DOM 变更后同步执行,阻塞绘制
172
+ // 用于读取 DOM 布局并同步重新渲染
173
+ console.log('DOM 变更后,绘制前');
174
+ });
175
+ ```
176
+
177
+ ### 3. useContext - 上下文消费
178
+
179
+ 避免 prop drilling,跨组件共享数据。
180
+
181
+ ```javascript
182
+ import React, { createContext, useContext, useState } from 'react';
183
+
184
+ // 创建 Context
185
+ const ThemeContext = createContext('light');
186
+ const UserContext = createContext(null);
187
+
188
+ function App() {
189
+ const [theme, setTheme] = useState('dark');
190
+ const [user, setUser] = useState({ name: 'Alice' });
191
+
192
+ return (
193
+ <ThemeContext.Provider value={theme}>
194
+ <UserContext.Provider value={{ user, setUser }}>
195
+ <Dashboard />
196
+ </UserContext.Provider>
197
+ </ThemeContext.Provider>
198
+ );
199
+ }
200
+
201
+ function Dashboard() {
202
+ return <Profile />;
203
+ }
204
+
205
+ function Profile() {
206
+ // 消费 Context
207
+ const theme = useContext(ThemeContext);
208
+ const { user } = useContext(UserContext);
209
+
210
+ return (
211
+ <div className={`profile ${theme}`}>
212
+ <h1>{user.name}</h1>
213
+ </div>
214
+ );
215
+ }
216
+ ```
217
+
218
+ ### 4. useReducer - 复杂状态逻辑
219
+
220
+ 适合管理复杂的状态逻辑,类似 Redux 的 reducer。
221
+
222
+ ```javascript
223
+ import React, { useReducer } from 'react';
224
+
225
+ // Reducer 函数
226
+ const initialState = { count: 0 };
227
+
228
+ function reducer(state, action) {
229
+ switch (action.type) {
230
+ case 'increment':
231
+ return { count: state.count + 1 };
232
+ case 'decrement':
233
+ return { count: state.count - 1 };
234
+ case 'reset':
235
+ return { count: action.payload };
236
+ default:
237
+ throw new Error('Unknown action');
238
+ }
239
+ }
240
+
241
+ function Counter() {
242
+ const [state, dispatch] = useReducer(reducer, initialState);
243
+
244
+ return (
245
+ <div>
246
+ <p>Count: {state.count}</p>
247
+ <button onClick={() => dispatch({ type: 'increment' })}>+</button>
248
+ <button onClick={() => dispatch({ type: 'decrement' })}>-</button>
249
+ <button onClick={() => dispatch({ type: 'reset', payload: 0 })}>
250
+ Reset
251
+ </button>
252
+ </div>
253
+ );
254
+ }
255
+ ```
256
+
257
+ #### 惰性初始化
258
+
259
+ ```javascript
260
+ function init(initialCount) {
261
+ return { count: initialCount };
262
+ }
263
+
264
+ function Counter({ initialCount }) {
265
+ const [state, dispatch] = useReducer(reducer, initialCount, init);
266
+ // ...
267
+ }
268
+ ```
269
+
270
+ #### 复杂表单状态
271
+
272
+ ```javascript
273
+ const formReducer = (state, action) => {
274
+ switch (action.type) {
275
+ case 'FIELD_CHANGE':
276
+ return {
277
+ ...state,
278
+ values: { ...state.values, [action.field]: action.value },
279
+ touched: { ...state.touched, [action.field]: true }
280
+ };
281
+ case 'SET_ERRORS':
282
+ return { ...state, errors: action.errors };
283
+ case 'RESET':
284
+ return action.initialState;
285
+ default:
286
+ return state;
287
+ }
288
+ };
289
+
290
+ function Form() {
291
+ const [state, dispatch] = useReducer(formReducer, {
292
+ values: { username: '', email: '' },
293
+ errors: {},
294
+ touched: {}
295
+ });
296
+
297
+ const handleChange = (field) => (e) => {
298
+ dispatch({ type: 'FIELD_CHANGE', field, value: e.target.value });
299
+ };
300
+
301
+ return (
302
+ <form>
303
+ <input
304
+ value={state.values.username}
305
+ onChange={handleChange('username')}
306
+ />
307
+ {state.errors.username && <span>{state.errors.username}</span>}
308
+ </form>
309
+ );
310
+ }
311
+ ```
312
+
313
+ ### 5. useCallback - 函数缓存
314
+
315
+ 缓存函数引用,避免不必要的重新渲染。
316
+
317
+ ```javascript
318
+ import React, { useState, useCallback, memo } from 'react';
319
+
320
+ // 子组件使用 memo 优化
321
+ const Button = memo(({ onClick, children }) => {
322
+ console.log('Button rendered');
323
+ return <button onClick={onClick}>{children}</button>;
324
+ });
325
+
326
+ function Parent() {
327
+ const [count, setCount] = useState(0);
328
+ const [text, setText] = useState('');
329
+
330
+ // ❌ 不好:每次渲染都创建新函数
331
+ // const handleClick = () => {
332
+ // console.log('Clicked');
333
+ // };
334
+
335
+ // ✅ 好:缓存函数引用
336
+ const handleClick = useCallback(() => {
337
+ console.log('Clicked');
338
+ }, []);
339
+
340
+ // 依赖状态
341
+ const handleIncrement = useCallback(() => {
342
+ setCount(prev => prev + 1);
343
+ }, []);
344
+
345
+ return (
346
+ <div>
347
+ <input value={text} onChange={e => setText(e.target.value)} />
348
+ <Button onClick={handleClick}>Click Me</Button>
349
+ <Button onClick={handleIncrement}>Count: {count}</Button>
350
+ </div>
351
+ );
352
+ }
353
+ ```
354
+
355
+ ### 6. useMemo - 值缓存
356
+
357
+ 缓存计算结果,避免重复计算。
358
+
359
+ ```javascript
360
+ import React, { useState, useMemo } from 'react';
361
+
362
+ function ProductList({ products, filter, sortBy }) {
363
+ // ❌ 不好:每次渲染都重新计算
364
+ // const filteredProducts = products
365
+ // .filter(p => p.name.includes(filter))
366
+ // .sort((a, b) => a[sortBy] - b[sortBy]);
367
+
368
+ // ✅ 好:缓存计算结果
369
+ const filteredProducts = useMemo(() => {
370
+ console.log('重新计算过滤和排序');
371
+ return products
372
+ .filter(p => p.name.includes(filter))
373
+ .sort((a, b) => a[sortBy] - b[sortBy]);
374
+ }, [products, filter, sortBy]);
375
+
376
+ return (
377
+ <ul>
378
+ {filteredProducts.map(product => (
379
+ <li key={product.id}>{product.name}</li>
380
+ ))}
381
+ </ul>
382
+ );
383
+ }
384
+
385
+ // 复杂计算示例
386
+ function Fibonacci({ n }) {
387
+ const fib = useMemo(() => {
388
+ const compute = (num) => {
389
+ if (num <= 1) return num;
390
+ return compute(num - 1) + compute(num - 2);
391
+ };
392
+ return compute(n);
393
+ }, [n]);
394
+
395
+ return <div>Fib({n}) = {fib}</div>;
396
+ }
397
+ ```
398
+
399
+ ### 7. useRef - 引用持久化
400
+
401
+ 获取 DOM 元素或存储可变值,不触发重新渲染。
402
+
403
+ ```javascript
404
+ import React, { useRef, useEffect } from 'react';
405
+
406
+ function TextInput() {
407
+ const inputRef = useRef(null);
408
+
409
+ useEffect(() => {
410
+ // 自动聚焦
411
+ inputRef.current.focus();
412
+ }, []);
413
+
414
+ return <input ref={inputRef} />;
415
+ }
416
+
417
+ // 存储可变值
418
+ function Timer() {
419
+ const [seconds, setSeconds] = useState(0);
420
+ const intervalRef = useRef(null);
421
+
422
+ const startTimer = () => {
423
+ if (intervalRef.current) return;
424
+ intervalRef.current = setInterval(() => {
425
+ setSeconds(prev => prev + 1);
426
+ }, 1000);
427
+ };
428
+
429
+ const stopTimer = () => {
430
+ if (intervalRef.current) {
431
+ clearInterval(intervalRef.current);
432
+ intervalRef.current = null;
433
+ }
434
+ };
435
+
436
+ return (
437
+ <div>
438
+ <p>Seconds: {seconds}</p>
439
+ <button onClick={startTimer}>Start</button>
440
+ <button onClick={stopTimer}>Stop</button>
441
+ </div>
442
+ );
443
+ }
444
+
445
+ // 跟踪上一次的值
446
+ function usePrevious(value) {
447
+ const ref = useRef();
448
+
449
+ useEffect(() => {
450
+ ref.current = value;
451
+ }, [value]);
452
+
453
+ return ref.current;
454
+ }
455
+
456
+ function Counter() {
457
+ const [count, setCount] = useState(0);
458
+ const prevCount = usePrevious(count);
459
+
460
+ return (
461
+ <div>
462
+ <p>Current: {count}, Previous: {prevCount}</p>
463
+ <button onClick={() => setCount(count + 1)}>Increment</button>
464
+ </div>
465
+ );
466
+ }
467
+ ```
468
+
469
+ ### 8. useImperativeHandle - 自定义 ref 暴露
470
+
471
+ 自定义暴露给父组件的实例值。
472
+
473
+ ```javascript
474
+ import React, { useRef, useImperativeHandle, forwardRef } from 'react';
475
+
476
+ const FancyInput = forwardRef((props, ref) => {
477
+ const inputRef = useRef();
478
+
479
+ useImperativeHandle(ref, () => ({
480
+ focus: () => {
481
+ inputRef.current.focus();
482
+ },
483
+ clear: () => {
484
+ inputRef.current.value = '';
485
+ }
486
+ }));
487
+
488
+ return <input ref={inputRef} {...props} />;
489
+ });
490
+
491
+ function Parent() {
492
+ const inputRef = useRef();
493
+
494
+ return (
495
+ <div>
496
+ <FancyInput ref={inputRef} />
497
+ <button onClick={() => inputRef.current.focus()}>Focus</button>
498
+ <button onClick={() => inputRef.current.clear()}>Clear</button>
499
+ </div>
500
+ );
501
+ }
502
+ ```
503
+
504
+ ---
505
+
506
+ ## 自定义 Hooks
507
+
508
+ 自定义 Hook 是复用逻辑的最佳方式。
509
+
510
+ ### 1. useLocalStorage - 持久化状态
511
+
512
+ ```javascript
513
+ import { useState, useEffect } from 'react';
514
+
515
+ function useLocalStorage(key, initialValue) {
516
+ const [storedValue, setStoredValue] = useState(() => {
517
+ try {
518
+ const item = window.localStorage.getItem(key);
519
+ return item ? JSON.parse(item) : initialValue;
520
+ } catch (error) {
521
+ console.error(error);
522
+ return initialValue;
523
+ }
524
+ });
525
+
526
+ const setValue = (value) => {
527
+ try {
528
+ const valueToStore = value instanceof Function ? value(storedValue) : value;
529
+ setStoredValue(valueToStore);
530
+ window.localStorage.setItem(key, JSON.stringify(valueToStore));
531
+ } catch (error) {
532
+ console.error(error);
533
+ }
534
+ };
535
+
536
+ return [storedValue, setValue];
537
+ }
538
+
539
+ // 使用
540
+ function App() {
541
+ const [name, setName] = useLocalStorage('name', '');
542
+
543
+ return (
544
+ <input
545
+ value={name}
546
+ onChange={e => setName(e.target.value)}
547
+ placeholder="输入名字(自动保存)"
548
+ />
549
+ );
550
+ }
551
+ ```
552
+
553
+ ### 2. useFetch - 数据获取
554
+
555
+ ```javascript
556
+ import { useState, useEffect } from 'react';
557
+
558
+ function useFetch(url) {
559
+ const [data, setData] = useState(null);
560
+ const [loading, setLoading] = useState(true);
561
+ const [error, setError] = useState(null);
562
+
563
+ useEffect(() => {
564
+ const abortController = new AbortController();
565
+
566
+ async function fetchData() {
567
+ try {
568
+ setLoading(true);
569
+ const response = await fetch(url, { signal: abortController.signal });
570
+ if (!response.ok) {
571
+ throw new Error(`HTTP error! status: ${response.status}`);
572
+ }
573
+ const json = await response.json();
574
+ setData(json);
575
+ setError(null);
576
+ } catch (error) {
577
+ if (error.name !== 'AbortError') {
578
+ setError(error);
579
+ }
580
+ } finally {
581
+ setLoading(false);
582
+ }
583
+ }
584
+
585
+ fetchData();
586
+
587
+ return () => abortController.abort();
588
+ }, [url]);
589
+
590
+ return { data, loading, error };
591
+ }
592
+
593
+ // 使用
594
+ function UserProfile({ userId }) {
595
+ const { data: user, loading, error } = useFetch(`/api/users/${userId}`);
596
+
597
+ if (loading) return <div>Loading...</div>;
598
+ if (error) return <div>Error: {error.message}</div>;
599
+ return <div>{user.name}</div>;
600
+ }
601
+ ```
602
+
603
+ ### 3. useDebounce - 防抖
604
+
605
+ ```javascript
606
+ import { useState, useEffect } from 'react';
607
+
608
+ function useDebounce(value, delay) {
609
+ const [debouncedValue, setDebouncedValue] = useState(value);
610
+
611
+ useEffect(() => {
612
+ const handler = setTimeout(() => {
613
+ setDebouncedValue(value);
614
+ }, delay);
615
+
616
+ return () => {
617
+ clearTimeout(handler);
618
+ };
619
+ }, [value, delay]);
620
+
621
+ return debouncedValue;
622
+ }
623
+
624
+ // 使用
625
+ function SearchInput() {
626
+ const [searchTerm, setSearchTerm] = useState('');
627
+ const debouncedSearchTerm = useDebounce(searchTerm, 500);
628
+
629
+ useEffect(() => {
630
+ if (debouncedSearchTerm) {
631
+ // 执行搜索
632
+ searchAPI(debouncedSearchTerm);
633
+ }
634
+ }, [debouncedSearchTerm]);
635
+
636
+ return (
637
+ <input
638
+ value={searchTerm}
639
+ onChange={e => setSearchTerm(e.target.value)}
640
+ placeholder="Search..."
641
+ />
642
+ );
643
+ }
644
+ ```
645
+
646
+ ### 4. useWindowSize - 窗口尺寸
647
+
648
+ ```javascript
649
+ import { useState, useEffect } from 'react';
650
+
651
+ function useWindowSize() {
652
+ const [windowSize, setWindowSize] = useState({
653
+ width: typeof window !== 'undefined' ? window.innerWidth : 0,
654
+ height: typeof window !== 'undefined' ? window.innerHeight : 0,
655
+ });
656
+
657
+ useEffect(() => {
658
+ function handleResize() {
659
+ setWindowSize({
660
+ width: window.innerWidth,
661
+ height: window.innerHeight,
662
+ });
663
+ }
664
+
665
+ window.addEventListener('resize', handleResize);
666
+ handleResize();
667
+
668
+ return () => window.removeEventListener('resize', handleResize);
669
+ }, []);
670
+
671
+ return windowSize;
672
+ }
673
+
674
+ // 使用
675
+ function ResponsiveComponent() {
676
+ const { width, height } = useWindowSize();
677
+
678
+ return (
679
+ <div>
680
+ <p>Width: {width}px</p>
681
+ <p>Height: {height}px</p>
682
+ {width < 768 && <p>Mobile view</p>}
683
+ </div>
684
+ );
685
+ }
686
+ ```
687
+
688
+ ### 5. useToggle - 切换状态
689
+
690
+ ```javascript
691
+ import { useState, useCallback } from 'react';
692
+
693
+ function useToggle(initialValue = false) {
694
+ const [value, setValue] = useState(initialValue);
695
+
696
+ const toggle = useCallback(() => setValue(v => !v), []);
697
+ const setTrue = useCallback(() => setValue(true), []);
698
+ const setFalse = useCallback(() => setValue(false), []);
699
+
700
+ return { value, toggle, setTrue, setFalse, setValue };
701
+ }
702
+
703
+ // 使用
704
+ function Modal() {
705
+ const { value: isOpen, toggle, setFalse: closeModal } = useToggle();
706
+
707
+ return (
708
+ <div>
709
+ <button onClick={toggle}>Open Modal</button>
710
+ {isOpen && (
711
+ <div className="modal">
712
+ <p>Modal content</p>
713
+ <button onClick={closeModal}>Close</button>
714
+ </div>
715
+ )}
716
+ </div>
717
+ );
718
+ }
719
+ ```
720
+
721
+ ### 6. useForm - 表单管理
722
+
723
+ ```javascript
724
+ import { useState, useCallback } from 'react';
725
+
726
+ function useForm(initialValues, validate) {
727
+ const [values, setValues] = useState(initialValues);
728
+ const [errors, setErrors] = useState({});
729
+ const [touched, setTouched] = useState({});
730
+
731
+ const handleChange = useCallback((e) => {
732
+ const { name, value, type, checked } = e.target;
733
+ setValues(prev => ({
734
+ ...prev,
735
+ [name]: type === 'checkbox' ? checked : value
736
+ }));
737
+ }, []);
738
+
739
+ const handleBlur = useCallback((e) => {
740
+ const { name } = e.target;
741
+ setTouched(prev => ({ ...prev, [name]: true }));
742
+
743
+ if (validate) {
744
+ const validationErrors = validate(values);
745
+ setErrors(validationErrors);
746
+ }
747
+ }, [values, validate]);
748
+
749
+ const handleSubmit = useCallback((onSubmit) => (e) => {
750
+ e.preventDefault();
751
+
752
+ if (validate) {
753
+ const validationErrors = validate(values);
754
+ setErrors(validationErrors);
755
+ setTouched(
756
+ Object.keys(values).reduce((acc, key) => ({ ...acc, [key]: true }), {})
757
+ );
758
+
759
+ if (Object.keys(validationErrors).length > 0) {
760
+ return;
761
+ }
762
+ }
763
+
764
+ onSubmit(values);
765
+ }, [values, validate]);
766
+
767
+ const reset = useCallback(() => {
768
+ setValues(initialValues);
769
+ setErrors({});
770
+ setTouched({});
771
+ }, [initialValues]);
772
+
773
+ return {
774
+ values,
775
+ errors,
776
+ touched,
777
+ handleChange,
778
+ handleBlur,
779
+ handleSubmit,
780
+ reset,
781
+ setValues
782
+ };
783
+ }
784
+
785
+ // 使用
786
+ function LoginForm() {
787
+ const {
788
+ values,
789
+ errors,
790
+ touched,
791
+ handleChange,
792
+ handleBlur,
793
+ handleSubmit
794
+ } = useForm(
795
+ { email: '', password: '' },
796
+ (values) => {
797
+ const errors = {};
798
+ if (!values.email) errors.email = 'Email is required';
799
+ if (!values.password) errors.password = 'Password is required';
800
+ return errors;
801
+ }
802
+ );
803
+
804
+ const onSubmit = (data) => {
805
+ console.log('Form submitted:', data);
806
+ };
807
+
808
+ return (
809
+ <form onSubmit={handleSubmit(onSubmit)}>
810
+ <input
811
+ name="email"
812
+ value={values.email}
813
+ onChange={handleChange}
814
+ onBlur={handleBlur}
815
+ />
816
+ {touched.email && errors.email && <span>{errors.email}</span>}
817
+
818
+ <input
819
+ name="password"
820
+ type="password"
821
+ value={values.password}
822
+ onChange={handleChange}
823
+ onBlur={handleBlur}
824
+ />
825
+ {touched.password && errors.password && <span>{errors.password}</span>}
826
+
827
+ <button type="submit">Submit</button>
828
+ </form>
829
+ );
830
+ }
831
+ ```
832
+
833
+ ---
834
+
835
+ ## Hooks 规则
836
+
837
+ ### 规则 1: 只在顶层调用 Hooks
838
+
839
+ ```javascript
840
+ // ❌ 错误:在循环中调用
841
+ function BadComponent({ items }) {
842
+ items.forEach(item => {
843
+ const [state, setState] = useState(item); // 错误!
844
+ });
845
+ }
846
+
847
+ // ✅ 正确:在顶层调用
848
+ function GoodComponent({ items }) {
849
+ const [states, setStates] = useState(items);
850
+ }
851
+
852
+ // ❌ 错误:在条件语句中调用
853
+ function BadComponent({ condition }) {
854
+ if (condition) {
855
+ const [value, setValue] = useState(0); // 错误!
856
+ }
857
+ }
858
+
859
+ // ✅ 正确:条件逻辑在 Hook 内部
860
+ function GoodComponent({ condition }) {
861
+ const [value, setValue] = useState(0);
862
+
863
+ useEffect(() => {
864
+ if (condition) {
865
+ // 条件逻辑
866
+ }
867
+ }, [condition]);
868
+ }
869
+ ```
870
+
871
+ ### 规则 2: 只在 React 函数中调用
872
+
873
+ ```javascript
874
+ // ❌ 错误:在普通函数中调用
875
+ function handleClick() {
876
+ const [count, setCount] = useState(0); // 错误!
877
+ }
878
+
879
+ // ✅ 正确:在组件或自定义 Hook 中调用
880
+ function MyComponent() {
881
+ const [count, setCount] = useState(0);
882
+
883
+ function handleClick() {
884
+ setCount(count + 1);
885
+ }
886
+ }
887
+ ```
888
+
889
+ ### ESLint 插件
890
+
891
+ ```bash
892
+ npm install eslint-plugin-react-hooks --save-dev
893
+ ```
894
+
895
+ ```json
896
+ {
897
+ "plugins": ["react-hooks"],
898
+ "rules": {
899
+ "react-hooks/rules-of-hooks": "error",
900
+ "react-hooks/exhaustive-deps": "warn"
901
+ }
902
+ }
903
+ ```
904
+
905
+ ---
906
+
907
+ ## 性能优化
908
+
909
+ ### 1. 使用 React.memo 优化子组件
910
+
911
+ ```javascript
912
+ const ChildComponent = memo(({ data, onClick }) => {
913
+ console.log('Child rendered');
914
+ return <div onClick={onClick}>{data}</div>;
915
+ });
916
+ ```
917
+
918
+ ### 2. 正确使用依赖数组
919
+
920
+ ```javascript
921
+ // ❌ 缺少依赖
922
+ useEffect(() => {
923
+ fetchData(userId);
924
+ }, []); // 缺少 userId 依赖
925
+
926
+ // ✅ 完整依赖
927
+ useEffect(() => {
928
+ fetchData(userId);
929
+ }, [userId]);
930
+ ```
931
+
932
+ ### 3. 避免内联函数和对象
933
+
934
+ ```javascript
935
+ // ❌ 每次渲染都创建新函数/对象
936
+ function Parent() {
937
+ const [count, setCount] = useState(0);
938
+
939
+ return (
940
+ <Child
941
+ onClick={() => console.log('click')} // 新函数
942
+ style={{ color: 'red' }} // 新对象
943
+ />
944
+ );
945
+ }
946
+
947
+ // ✅ 使用 useCallback 和 useMemo
948
+ function Parent() {
949
+ const [count, setCount] = useState(0);
950
+
951
+ const handleClick = useCallback(() => {
952
+ console.log('click');
953
+ }, []);
954
+
955
+ const style = useMemo(() => ({ color: 'red' }), []);
956
+
957
+ return <Child onClick={handleClick} style={style} />;
958
+ }
959
+ ```
960
+
961
+ ### 4. 虚拟化长列表
962
+
963
+ ```javascript
964
+ import { FixedSizeList } from 'react-window';
965
+
966
+ function VirtualizedList({ items }) {
967
+ const Row = ({ index, style }) => (
968
+ <div style={style}>{items[index].name}</div>
969
+ );
970
+
971
+ return (
972
+ <FixedSizeList
973
+ height={600}
974
+ itemCount={items.length}
975
+ itemSize={35}
976
+ width="100%"
977
+ >
978
+ {Row}
979
+ </FixedSizeList>
980
+ );
981
+ }
982
+ ```
983
+
984
+ ---
985
+
986
+ ## 常见陷阱
987
+
988
+ ### 陷阱 1: 闭包陷阱
989
+
990
+ ```javascript
991
+ // ❌ 错误:闭包捕获旧值
992
+ function Counter() {
993
+ const [count, setCount] = useState(0);
994
+
995
+ useEffect(() => {
996
+ const timer = setInterval(() => {
997
+ console.log(count); // 永远是 0
998
+ }, 1000);
999
+ return () => clearInterval(timer);
1000
+ }, []);
1001
+ }
1002
+
1003
+ // ✅ 正确:使用函数式更新
1004
+ function Counter() {
1005
+ const [count, setCount] = useState(0);
1006
+
1007
+ useEffect(() => {
1008
+ const timer = setInterval(() => {
1009
+ setCount(prev => {
1010
+ console.log(prev); // 正确的值
1011
+ return prev;
1012
+ });
1013
+ }, 1000);
1014
+ return () => clearInterval(timer);
1015
+ }, []);
1016
+ }
1017
+
1018
+ // ✅ 或使用 ref
1019
+ function Counter() {
1020
+ const [count, setCount] = useState(0);
1021
+ const countRef = useRef(count);
1022
+
1023
+ countRef.current = count;
1024
+
1025
+ useEffect(() => {
1026
+ const timer = setInterval(() => {
1027
+ console.log(countRef.current); // 正确的值
1028
+ }, 1000);
1029
+ return () => clearInterval(timer);
1030
+ }, []);
1031
+ }
1032
+ ```
1033
+
1034
+ ### 陷阱 2: 无限循环
1035
+
1036
+ ```javascript
1037
+ // ❌ 错误:导致无限循环
1038
+ function BadComponent() {
1039
+ const [items, setItems] = useState([]);
1040
+
1041
+ useEffect(() => {
1042
+ setItems([...items, newItem]); // 触发重新渲染
1043
+ }, [items]); // 依赖 items,导致循环
1044
+ }
1045
+
1046
+ // ✅ 正确:使用函数式更新
1047
+ function GoodComponent() {
1048
+ const [items, setItems] = useState([]);
1049
+
1050
+ useEffect(() => {
1051
+ setItems(prev => [...prev, newItem]);
1052
+ }, []); // 不依赖 items
1053
+ }
1054
+ ```
1055
+
1056
+ ### 陷阱 3: 直接修改状态
1057
+
1058
+ ```javascript
1059
+ // ❌ 错误:直接修改状态
1060
+ const [user, setUser] = useState({ name: 'Alice' });
1061
+ user.name = 'Bob'; // 不会触发重新渲染
1062
+
1063
+ // ✅ 正确:创建新对象
1064
+ setUser({ ...user, name: 'Bob' });
1065
+ ```
1066
+
1067
+ ---
1068
+
1069
+ ## 最佳实践
1070
+
1071
+ 1. **✅ 使用函数式更新**: `setCount(prev => prev + 1)`
1072
+ 2. **✅ 保持依赖数组完整**: 使用 eslint-plugin-react-hooks
1073
+ 3. **✅ 拆分复杂状态**: 多个 useState 而非一个巨大对象
1074
+ 4. **✅ 自定义 Hook 复用逻辑**: 避免复制粘贴
1075
+ 5. **✅ 命名规范**: use 开头的自定义 Hook
1076
+ 6. **✅ 合理使用 useMemo/useCallback**: 不要过度优化
1077
+ 7. **✅ 错误边界**: 处理渲染错误
1078
+ 8. **✅ 清理副作用**: useEffect 返回清理函数
1079
+ 9. **✅ 测试 Hooks**: 使用 @testing-library/react-hooks
1080
+ 10. **✅ TypeScript 支持**: 为 Hook 添加类型
1081
+
1082
+ ---
1083
+
1084
+ ## TypeScript 集成
1085
+
1086
+ ```typescript
1087
+ import React, { useState, useEffect, useCallback, useMemo } from 'react';
1088
+
1089
+ interface User {
1090
+ id: number;
1091
+ name: string;
1092
+ email: string;
1093
+ }
1094
+
1095
+ // useState with TypeScript
1096
+ function UserForm() {
1097
+ const [user, setUser] = useState<User>({
1098
+ id: 0,
1099
+ name: '',
1100
+ email: ''
1101
+ });
1102
+
1103
+ const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
1104
+ const { name, value } = e.target;
1105
+ setUser(prev => ({ ...prev, [name]: value }));
1106
+ };
1107
+
1108
+ return (
1109
+ <form>
1110
+ <input name="name" value={user.name} onChange={handleChange} />
1111
+ <input name="email" value={user.email} onChange={handleChange} />
1112
+ </form>
1113
+ );
1114
+ }
1115
+
1116
+ // Custom Hook with TypeScript
1117
+ function useFetch<T>(url: string) {
1118
+ const [data, setData] = useState<T | null>(null);
1119
+ const [loading, setLoading] = useState<boolean>(true);
1120
+ const [error, setError] = useState<Error | null>(null);
1121
+
1122
+ useEffect(() => {
1123
+ fetch(url)
1124
+ .then(res => res.json())
1125
+ .then((data: T) => {
1126
+ setData(data);
1127
+ setLoading(false);
1128
+ })
1129
+ .catch((error: Error) => {
1130
+ setError(error);
1131
+ setLoading(false);
1132
+ });
1133
+ }, [url]);
1134
+
1135
+ return { data, loading, error };
1136
+ }
1137
+
1138
+ // 使用
1139
+ function UserList() {
1140
+ const { data: users, loading, error } = useFetch<User[]>('/api/users');
1141
+
1142
+ if (loading) return <div>Loading...</div>;
1143
+ if (error) return <div>Error: {error.message}</div>;
1144
+
1145
+ return (
1146
+ <ul>
1147
+ {users?.map(user => <li key={user.id}>{user.name}</li>)}
1148
+ </ul>
1149
+ );
1150
+ }
1151
+ ```
1152
+
1153
+ ---
1154
+
1155
+ ## 参考资料
1156
+
1157
+ ### 官方文档
1158
+ - [React Hooks 官方文档](https://react.dev/reference/react)
1159
+ - [Hooks FAQ](https://react.dev/reference/react/hooks)
1160
+
1161
+ ### 推荐库
1162
+ - **表单**: react-hook-form, formik
1163
+ - **状态管理**: zustand, recoil, jotai
1164
+ - **副作用**: react-query, swr
1165
+ - **路由**: react-router (支持 hooks)
1166
+
1167
+ ---
1168
+
1169
+ **文档版本**: v1.0
1170
+ **最后更新**: 2026-03-28
1171
+ **质量评分**: 93/100