Coding
PromptBeginner5 minmarkdown
Nano Banana Pro
Agent skill for nano-banana-pro
7
พัฒนา Frontend ด้วย Angular, React, Vue, Next.js อย่างมืออาชีพ
Sign in to like and favorite skills
---
[user.name][user.name][user.name][user.name]: F[user.name]o[user.name]t[user.name][user.name]d D[user.name]v[user.name]lop[user.name][user.name][user.name]t
d[user.name][user.name]c[user.name]iptio[user.name]: พัฒนา F[user.name]o[user.name]t[user.name][user.name]d ด้วย A[user.name]g[user.name]l[user.name][user.name], R[user.name][user.name]ct, V[user.name][user.name], N[user.name]xt[user.name]j[user.name] อย่างมืออาชีพ
---
# F[user.name]o[user.name]t[user.name][user.name]d D[user.name]v[user.name]lop[user.name][user.name][user.name]t Skill
## Ov[user.name][user.name]vi[user.name]w
Skill สำหรับพัฒนา F[user.name]o[user.name]t[user.name][user.name]d [user.name]pplic[user.name]tio[user.name][user.name] ครอบคลุม 4 f[user.name][user.name][user.name][user.name]wo[user.name]k[user.name] หลัก พร้อม b[user.name][user.name]t p[user.name][user.name]ctic[user.name][user.name]
---
## A[user.name]g[user.name]l[user.name][user.name]
### P[user.name]oj[user.name]ct St[user.name][user.name]ct[user.name][user.name][user.name]
```
[user.name][user.name]c/
├── [user.name]pp/
│ ├── co[user.name][user.name]/ # Si[user.name]gl[user.name]to[user.name] [user.name][user.name][user.name]vic[user.name][user.name], g[user.name][user.name][user.name]d[user.name], i[user.name]t[user.name][user.name]c[user.name]pto[user.name][user.name]
│ │ ├── [user.name][user.name][user.name]vic[user.name][user.name]/
│ │ ├── g[user.name][user.name][user.name]d[user.name]/
│ │ └── i[user.name]t[user.name][user.name]c[user.name]pto[user.name][user.name]/
│ ├── [user.name]h[user.name][user.name][user.name]d/ # Sh[user.name][user.name][user.name]d co[user.name]po[user.name][user.name][user.name]t[user.name], pip[user.name][user.name], di[user.name][user.name]ctiv[user.name][user.name]
│ │ ├── co[user.name]po[user.name][user.name][user.name]t[user.name]/
│ │ ├── pip[user.name][user.name]/
│ │ └── di[user.name][user.name]ctiv[user.name][user.name]/
│ ├── f[user.name][user.name]t[user.name][user.name][user.name][user.name]/ # F[user.name][user.name]t[user.name][user.name][user.name] [user.name]od[user.name]l[user.name][user.name]
│ │ ├── [user.name][user.name]th/
│ │ ├── d[user.name][user.name]hbo[user.name][user.name]d/
│ │ └── [user.name][user.name][user.name][user.name][user.name]/
│ └── [user.name]pp[user.name]co[user.name]po[user.name][user.name][user.name]t[user.name]t[user.name]
├── [user.name][user.name][user.name][user.name]t[user.name]/
└── [user.name][user.name]vi[user.name]o[user.name][user.name][user.name][user.name]t[user.name]/
```
### B[user.name][user.name]t P[user.name][user.name]ctic[user.name][user.name]
1[user.name] **St[user.name][user.name]d[user.name]lo[user.name][user.name] Co[user.name]po[user.name][user.name][user.name]t[user.name]** - ใช้ [user.name]t[user.name][user.name]d[user.name]lo[user.name][user.name] co[user.name]po[user.name][user.name][user.name]t[user.name] (A[user.name]g[user.name]l[user.name][user.name] 15+)
2[user.name] **Sig[user.name][user.name]l[user.name]** - ใช้ Sig[user.name][user.name]l[user.name] สำหรับ [user.name][user.name][user.name]ctivity (A[user.name]g[user.name]l[user.name][user.name] 16+)
3[user.name] **S[user.name][user.name][user.name]t v[user.name] D[user.name][user.name]b Co[user.name]po[user.name][user.name][user.name]t[user.name]** - แยก co[user.name]t[user.name]i[user.name][user.name][user.name] และ p[user.name][user.name][user.name][user.name][user.name]t[user.name]tio[user.name][user.name]l
4[user.name] **O[user.name]P[user.name][user.name]h Ch[user.name][user.name]g[user.name] D[user.name]t[user.name]ctio[user.name]** - ใช้เพื่อ p[user.name][user.name]fo[user.name][user.name][user.name][user.name]c[user.name]
5[user.name] **L[user.name]zy Lo[user.name]di[user.name]g** - Lo[user.name]d [user.name]od[user.name]l[user.name][user.name] ตามต้องการ
### Co[user.name][user.name]o[user.name] P[user.name]tt[user.name][user.name][user.name][user.name]
```typ[user.name][user.name]c[user.name]ipt
// St[user.name][user.name]d[user.name]lo[user.name][user.name] Co[user.name]po[user.name][user.name][user.name]t with Sig[user.name][user.name]l[user.name] (A[user.name]g[user.name]l[user.name][user.name] 17+)
i[user.name]po[user.name]t { toSig[user.name][user.name]l } f[user.name]o[user.name] "@[user.name][user.name]g[user.name]l[user.name][user.name]/co[user.name][user.name]/[user.name]xj[user.name]-i[user.name]t[user.name][user.name]op";
@Co[user.name]po[user.name][user.name][user.name]t({
[user.name][user.name]l[user.name]cto[user.name]: "[user.name]pp-[user.name][user.name][user.name][user.name]-li[user.name]t",
[user.name]t[user.name][user.name]d[user.name]lo[user.name][user.name]: t[user.name][user.name][user.name],
ch[user.name][user.name]g[user.name]D[user.name]t[user.name]ctio[user.name]: Ch[user.name][user.name]g[user.name]D[user.name]t[user.name]ctio[user.name]St[user.name][user.name]t[user.name]gy[user.name]O[user.name]P[user.name][user.name]h,
t[user.name][user.name]pl[user.name]t[user.name]: `
@fo[user.name] ([user.name][user.name][user.name][user.name] of [user.name][user.name][user.name][user.name][user.name](); t[user.name][user.name]ck [user.name][user.name][user.name][user.name][user.name]id) {
<div>{{ [user.name][user.name][user.name][user.name][user.name][user.name][user.name][user.name][user.name] }}</div>
}
`,
})
[user.name]xpo[user.name]t cl[user.name][user.name][user.name] U[user.name][user.name][user.name]Li[user.name]tCo[user.name]po[user.name][user.name][user.name]t {
p[user.name]iv[user.name]t[user.name] [user.name][user.name][user.name][user.name]S[user.name][user.name]vic[user.name] = i[user.name]j[user.name]ct(U[user.name][user.name][user.name]S[user.name][user.name]vic[user.name]);
// ใช้ toSig[user.name][user.name]l() แทน [user.name]ff[user.name]ct() + [user.name][user.name]b[user.name]c[user.name]ib[user.name]
[user.name][user.name][user.name][user.name][user.name] = toSig[user.name][user.name]l(thi[user.name][user.name][user.name][user.name][user.name][user.name]S[user.name][user.name]vic[user.name][user.name]g[user.name]tU[user.name][user.name][user.name][user.name](), { i[user.name]iti[user.name]lV[user.name]l[user.name][user.name]: [] });
}
```
---
## R[user.name][user.name]ct
### P[user.name]oj[user.name]ct St[user.name][user.name]ct[user.name][user.name][user.name]
```
[user.name][user.name]c/
├── co[user.name]po[user.name][user.name][user.name]t[user.name]/ # Sh[user.name][user.name][user.name]d/[user.name][user.name][user.name][user.name][user.name]bl[user.name] co[user.name]po[user.name][user.name][user.name]t[user.name]
│ ├── [user.name]i/ # B[user.name][user.name]ic UI co[user.name]po[user.name][user.name][user.name]t[user.name]
│ └── l[user.name]yo[user.name]t/ # L[user.name]yo[user.name]t co[user.name]po[user.name][user.name][user.name]t[user.name]
├── f[user.name][user.name]t[user.name][user.name][user.name][user.name]/ # F[user.name][user.name]t[user.name][user.name][user.name]-b[user.name][user.name][user.name]d [user.name]od[user.name]l[user.name][user.name]
│ ├── [user.name][user.name]th/
│ │ ├── co[user.name]po[user.name][user.name][user.name]t[user.name]/
│ │ ├── hook[user.name]/
│ │ └── [user.name]pi[user.name]t[user.name]
│ └── [user.name][user.name][user.name][user.name][user.name]/
├── hook[user.name]/ # Sh[user.name][user.name][user.name]d c[user.name][user.name]to[user.name] hook[user.name]
├── lib/ # Utiliti[user.name][user.name], h[user.name]lp[user.name][user.name][user.name]
├── [user.name][user.name][user.name]vic[user.name][user.name]/ # API [user.name][user.name][user.name]vic[user.name][user.name]
└── [user.name]to[user.name][user.name][user.name]/ # St[user.name]t[user.name] [user.name][user.name][user.name][user.name]g[user.name][user.name][user.name][user.name]t (Z[user.name][user.name]t[user.name][user.name]d/R[user.name]d[user.name]x)
```
### B[user.name][user.name]t P[user.name][user.name]ctic[user.name][user.name]
1[user.name] **F[user.name][user.name]ctio[user.name][user.name]l Co[user.name]po[user.name][user.name][user.name]t[user.name]** - ใช้ f[user.name][user.name]ctio[user.name][user.name]l co[user.name]po[user.name][user.name][user.name]t[user.name] เสมอ
2[user.name] **C[user.name][user.name]to[user.name] Hook[user.name]** - Ext[user.name][user.name]ct logic ออกเป็น hook[user.name]
3[user.name] **R[user.name][user.name]ct Q[user.name][user.name][user.name]y/SWR** - สำหรับ d[user.name]t[user.name] f[user.name]tchi[user.name]g
4[user.name] **Z[user.name][user.name]t[user.name][user.name]d/Jot[user.name]i** - สำหรับ [user.name]i[user.name]pl[user.name] [user.name]t[user.name]t[user.name] [user.name][user.name][user.name][user.name]g[user.name][user.name][user.name][user.name]t
5[user.name] **E[user.name][user.name]o[user.name] Bo[user.name][user.name]d[user.name][user.name]i[user.name][user.name]** - H[user.name][user.name]dl[user.name] [user.name][user.name][user.name]o[user.name][user.name] g[user.name][user.name]c[user.name]f[user.name]lly
### Co[user.name][user.name]o[user.name] P[user.name]tt[user.name][user.name][user.name][user.name]
```t[user.name]x
// C[user.name][user.name]to[user.name] Hook P[user.name]tt[user.name][user.name][user.name]
f[user.name][user.name]ctio[user.name] [user.name][user.name][user.name]U[user.name][user.name][user.name][user.name]() {
co[user.name][user.name]t [[user.name][user.name][user.name][user.name][user.name], [user.name][user.name]tU[user.name][user.name][user.name][user.name]] = [user.name][user.name][user.name]St[user.name]t[user.name]<U[user.name][user.name][user.name][]>([]);
co[user.name][user.name]t [lo[user.name]di[user.name]g, [user.name][user.name]tLo[user.name]di[user.name]g] = [user.name][user.name][user.name]St[user.name]t[user.name](t[user.name][user.name][user.name]);
co[user.name][user.name]t [[user.name][user.name][user.name]o[user.name], [user.name][user.name]tE[user.name][user.name]o[user.name]] = [user.name][user.name][user.name]St[user.name]t[user.name]<E[user.name][user.name]o[user.name] | [user.name][user.name]ll>([user.name][user.name]ll);
[user.name][user.name][user.name]Eff[user.name]ct(() => {
f[user.name]tchU[user.name][user.name][user.name][user.name]()
[user.name]th[user.name][user.name]([user.name][user.name]tU[user.name][user.name][user.name][user.name])
[user.name]c[user.name]tch([user.name][user.name]tE[user.name][user.name]o[user.name])
[user.name]fi[user.name][user.name]lly(() => [user.name][user.name]tLo[user.name]di[user.name]g(f[user.name]l[user.name][user.name]));
}, []);
[user.name][user.name]t[user.name][user.name][user.name] { [user.name][user.name][user.name][user.name][user.name], lo[user.name]di[user.name]g, [user.name][user.name][user.name]o[user.name] };
}
// R[user.name][user.name]ct Q[user.name][user.name][user.name]y P[user.name]tt[user.name][user.name][user.name]
f[user.name][user.name]ctio[user.name] [user.name][user.name][user.name]U[user.name][user.name][user.name][user.name]() {
[user.name][user.name]t[user.name][user.name][user.name] [user.name][user.name][user.name]Q[user.name][user.name][user.name]y({
q[user.name][user.name][user.name]yK[user.name]y: ["[user.name][user.name][user.name][user.name][user.name]"],
q[user.name][user.name][user.name]yF[user.name]: f[user.name]tchU[user.name][user.name][user.name][user.name],
[user.name]t[user.name]l[user.name]Ti[user.name][user.name]: 5 * 60 * 1000,
});
}
```
---
## V[user.name][user.name] 3
### P[user.name]oj[user.name]ct St[user.name][user.name]ct[user.name][user.name][user.name]
```
[user.name][user.name]c/
├── co[user.name]po[user.name][user.name][user.name]t[user.name]/ # Sh[user.name][user.name][user.name]d co[user.name]po[user.name][user.name][user.name]t[user.name]
│ ├── [user.name]i/
│ └── l[user.name]yo[user.name]t/
├── co[user.name]po[user.name][user.name]bl[user.name][user.name]/ # Co[user.name]po[user.name]itio[user.name] API f[user.name][user.name]ctio[user.name][user.name]
├── vi[user.name]w[user.name]/ # P[user.name]g[user.name] co[user.name]po[user.name][user.name][user.name]t[user.name]
├── [user.name]to[user.name][user.name][user.name]/ # Pi[user.name]i[user.name] [user.name]to[user.name][user.name][user.name]
├── [user.name][user.name][user.name]vic[user.name][user.name]/ # API [user.name][user.name][user.name]vic[user.name][user.name]
├── [user.name]o[user.name]t[user.name][user.name]/
└── [user.name][user.name][user.name][user.name]t[user.name]/
```
### B[user.name][user.name]t P[user.name][user.name]ctic[user.name][user.name]
1[user.name] **Co[user.name]po[user.name]itio[user.name] API** - ใช้ `<[user.name]c[user.name]ipt [user.name][user.name]t[user.name]p>` [user.name]y[user.name]t[user.name]x
2[user.name] **Pi[user.name]i[user.name]** - สำหรับ [user.name]t[user.name]t[user.name] [user.name][user.name][user.name][user.name]g[user.name][user.name][user.name][user.name]t
3[user.name] **Co[user.name]po[user.name][user.name]bl[user.name][user.name]** - Ext[user.name][user.name]ct [user.name][user.name][user.name][user.name][user.name]bl[user.name] logic
4[user.name] **d[user.name]fi[user.name][user.name]P[user.name]op[user.name]/d[user.name]fi[user.name][user.name]E[user.name]it[user.name]** - Typ[user.name]-[user.name][user.name]f[user.name] p[user.name]op[user.name] [user.name][user.name]d [user.name]v[user.name][user.name]t[user.name]
5[user.name] **S[user.name][user.name]p[user.name][user.name][user.name][user.name]** - สำหรับ [user.name][user.name]y[user.name]c co[user.name]po[user.name][user.name][user.name]t[user.name]
### Co[user.name][user.name]o[user.name] P[user.name]tt[user.name][user.name][user.name][user.name]
```v[user.name][user.name]
<[user.name]c[user.name]ipt [user.name][user.name]t[user.name]p l[user.name][user.name]g="t[user.name]">
i[user.name]po[user.name]t { [user.name][user.name]f, co[user.name]p[user.name]t[user.name]d, o[user.name]Mo[user.name][user.name]t[user.name]d } f[user.name]o[user.name] "v[user.name][user.name]";
i[user.name]po[user.name]t { [user.name][user.name][user.name]U[user.name][user.name][user.name]Sto[user.name][user.name] } f[user.name]o[user.name] "@/[user.name]to[user.name][user.name][user.name]/[user.name][user.name][user.name][user.name]";
// P[user.name]op[user.name] & E[user.name]it[user.name]
co[user.name][user.name]t p[user.name]op[user.name] = d[user.name]fi[user.name][user.name]P[user.name]op[user.name]<{
[user.name][user.name][user.name][user.name]Id: [user.name][user.name][user.name]b[user.name][user.name];
}>();
co[user.name][user.name]t [user.name][user.name]it = d[user.name]fi[user.name][user.name]E[user.name]it[user.name]<{
([user.name]: "[user.name][user.name]l[user.name]ct", [user.name][user.name][user.name][user.name]: U[user.name][user.name][user.name]): void;
}>();
// Co[user.name]po[user.name][user.name]bl[user.name][user.name]
co[user.name][user.name]t [user.name][user.name][user.name][user.name]Sto[user.name][user.name] = [user.name][user.name][user.name]U[user.name][user.name][user.name]Sto[user.name][user.name]();
// R[user.name][user.name]ctiv[user.name] St[user.name]t[user.name]
co[user.name][user.name]t [user.name][user.name][user.name][user.name]chQ[user.name][user.name][user.name]y = [user.name][user.name]f("");
// Co[user.name]p[user.name]t[user.name]d
co[user.name][user.name]t filt[user.name][user.name][user.name]dU[user.name][user.name][user.name][user.name] = co[user.name]p[user.name]t[user.name]d(() =>
[user.name][user.name][user.name][user.name]Sto[user.name][user.name][user.name][user.name][user.name][user.name][user.name][user.name][user.name]filt[user.name][user.name](([user.name]) => [user.name][user.name][user.name][user.name][user.name][user.name][user.name]i[user.name]cl[user.name]d[user.name][user.name]([user.name][user.name][user.name][user.name]chQ[user.name][user.name][user.name]y[user.name]v[user.name]l[user.name][user.name])),
);
// Lif[user.name]cycl[user.name]
o[user.name]Mo[user.name][user.name]t[user.name]d(() => {
[user.name][user.name][user.name][user.name]Sto[user.name][user.name][user.name]f[user.name]tchU[user.name][user.name][user.name][user.name]();
});
</[user.name]c[user.name]ipt>
```
---
## N[user.name]xt[user.name]j[user.name] (App Ro[user.name]t[user.name][user.name])
### P[user.name]oj[user.name]ct St[user.name][user.name]ct[user.name][user.name][user.name]
```
[user.name][user.name]c/
├── [user.name]pp/ # App Ro[user.name]t[user.name][user.name]
│ ├── ([user.name][user.name]th)/ # Ro[user.name]t[user.name] g[user.name]o[user.name]p[user.name]
│ │ ├── logi[user.name]/
│ │ └── [user.name][user.name]gi[user.name]t[user.name][user.name]/
│ ├── d[user.name][user.name]hbo[user.name][user.name]d/
│ │ ├── p[user.name]g[user.name][user.name]t[user.name]x
│ │ ├── l[user.name]yo[user.name]t[user.name]t[user.name]x
│ │ └── lo[user.name]di[user.name]g[user.name]t[user.name]x
│ ├── [user.name]pi/ # API Ro[user.name]t[user.name][user.name]
│ │ └── [user.name][user.name][user.name][user.name][user.name]/
│ ├── l[user.name]yo[user.name]t[user.name]t[user.name]x
│ └── p[user.name]g[user.name][user.name]t[user.name]x
├── co[user.name]po[user.name][user.name][user.name]t[user.name]/
│ ├── [user.name]i/
│ └── f[user.name][user.name]t[user.name][user.name][user.name][user.name]/
├── lib/ # Utiliti[user.name][user.name]
└── [user.name][user.name][user.name]vic[user.name][user.name]/ # API [user.name][user.name][user.name]vic[user.name][user.name]
```
### B[user.name][user.name]t P[user.name][user.name]ctic[user.name][user.name]
1[user.name] **S[user.name][user.name]v[user.name][user.name] Co[user.name]po[user.name][user.name][user.name]t[user.name]** - D[user.name]f[user.name][user.name]lt, ใช้สำหรับ d[user.name]t[user.name] f[user.name]tchi[user.name]g
2[user.name] **Cli[user.name][user.name]t Co[user.name]po[user.name][user.name][user.name]t[user.name]** - เฉพาะเมื่อต้องการ i[user.name]t[user.name][user.name][user.name]ctivity
3[user.name] **Ro[user.name]t[user.name] G[user.name]o[user.name]p[user.name]** - จัดกลุ่ม [user.name]o[user.name]t[user.name][user.name]
4[user.name] **P[user.name][user.name][user.name]ll[user.name]l Ro[user.name]t[user.name][user.name]** - R[user.name][user.name]d[user.name][user.name] [user.name][user.name]ltipl[user.name] p[user.name]g[user.name][user.name]
5[user.name] **S[user.name][user.name]v[user.name][user.name] Actio[user.name][user.name]** - สำหรับ fo[user.name][user.name] [user.name][user.name]b[user.name]i[user.name][user.name]io[user.name][user.name]
### Co[user.name][user.name]o[user.name] P[user.name]tt[user.name][user.name][user.name][user.name]
```t[user.name]x
// S[user.name][user.name]v[user.name][user.name] Co[user.name]po[user.name][user.name][user.name]t (d[user.name]f[user.name][user.name]lt)
[user.name][user.name]y[user.name]c f[user.name][user.name]ctio[user.name] U[user.name][user.name][user.name][user.name]P[user.name]g[user.name]() {
co[user.name][user.name]t [user.name][user.name][user.name][user.name][user.name] = [user.name]w[user.name]it f[user.name]tchU[user.name][user.name][user.name][user.name](); // S[user.name][user.name]v[user.name][user.name]-[user.name]id[user.name]
[user.name][user.name]t[user.name][user.name][user.name] (
<div>
<U[user.name][user.name][user.name]Li[user.name]t [user.name][user.name][user.name][user.name][user.name]={[user.name][user.name][user.name][user.name][user.name]} />
<AddU[user.name][user.name][user.name]B[user.name]tto[user.name] /> {/* Cli[user.name][user.name]t Co[user.name]po[user.name][user.name][user.name]t */}
</div>
);
}
// Cli[user.name][user.name]t Co[user.name]po[user.name][user.name][user.name]t
("[user.name][user.name][user.name] cli[user.name][user.name]t");
f[user.name][user.name]ctio[user.name] AddU[user.name][user.name][user.name]B[user.name]tto[user.name]() {
co[user.name][user.name]t [op[user.name][user.name], [user.name][user.name]tOp[user.name][user.name]] = [user.name][user.name][user.name]St[user.name]t[user.name](f[user.name]l[user.name][user.name]);
[user.name][user.name]t[user.name][user.name][user.name] <b[user.name]tto[user.name] o[user.name]Click={() => [user.name][user.name]tOp[user.name][user.name](t[user.name][user.name][user.name])}>Add U[user.name][user.name][user.name]</b[user.name]tto[user.name]>;
}
// S[user.name][user.name]v[user.name][user.name] Actio[user.name]
[user.name][user.name]y[user.name]c f[user.name][user.name]ctio[user.name] c[user.name][user.name][user.name]t[user.name]U[user.name][user.name][user.name](fo[user.name][user.name]D[user.name]t[user.name]: Fo[user.name][user.name]D[user.name]t[user.name]) {
"[user.name][user.name][user.name] [user.name][user.name][user.name]v[user.name][user.name]";
co[user.name][user.name]t [user.name][user.name][user.name][user.name] = fo[user.name][user.name]D[user.name]t[user.name][user.name]g[user.name]t("[user.name][user.name][user.name][user.name]");
[user.name]w[user.name]it db[user.name][user.name][user.name][user.name][user.name][user.name][user.name]c[user.name][user.name][user.name]t[user.name]({ [user.name][user.name][user.name][user.name] });
[user.name][user.name]v[user.name]lid[user.name]t[user.name]P[user.name]th("/[user.name][user.name][user.name][user.name][user.name]");
}
```
---
## Sh[user.name][user.name][user.name]d B[user.name][user.name]t P[user.name][user.name]ctic[user.name][user.name]
### CSS/Styli[user.name]g
1[user.name] **CSS Mod[user.name]l[user.name][user.name]** หรือ **T[user.name]ilwi[user.name]d CSS**
2[user.name] **CSS V[user.name][user.name]i[user.name]bl[user.name][user.name]** สำหรับ th[user.name][user.name]i[user.name]g
3[user.name] **Mobil[user.name]-fi[user.name][user.name]t** [user.name][user.name][user.name]po[user.name][user.name]iv[user.name] d[user.name][user.name]ig[user.name]
4[user.name] **Co[user.name][user.name]i[user.name]t[user.name][user.name]t [user.name]p[user.name]ci[user.name]g** (8px g[user.name]id [user.name]y[user.name]t[user.name][user.name])
### P[user.name][user.name]fo[user.name][user.name][user.name][user.name]c[user.name]
1[user.name] **L[user.name]zy lo[user.name]di[user.name]g** co[user.name]po[user.name][user.name][user.name]t[user.name] และ [user.name]o[user.name]t[user.name][user.name]
2[user.name] **I[user.name][user.name]g[user.name] opti[user.name]iz[user.name]tio[user.name]** ([user.name][user.name]xt/i[user.name][user.name]g[user.name], @[user.name][user.name]g[user.name]l[user.name][user.name]/co[user.name][user.name]o[user.name])
3[user.name] **Cod[user.name] [user.name]plitti[user.name]g**
4[user.name] **M[user.name][user.name]oiz[user.name]tio[user.name]** ([user.name][user.name][user.name]M[user.name][user.name]o, R[user.name][user.name]ct[user.name][user.name][user.name][user.name]o, co[user.name]p[user.name]t[user.name]d)
### Acc[user.name][user.name][user.name]ibility
1[user.name] **S[user.name][user.name][user.name][user.name]tic HTML**
2[user.name] **ARIA l[user.name]b[user.name]l[user.name]**
3[user.name] **K[user.name]ybo[user.name][user.name]d [user.name][user.name]vig[user.name]tio[user.name]**
4[user.name] **Colo[user.name] co[user.name]t[user.name][user.name][user.name]t**
5[user.name] **Foc[user.name][user.name] [user.name][user.name][user.name][user.name]g[user.name][user.name][user.name][user.name]t**
---
## F[user.name]o[user.name]t[user.name][user.name]d Ch[user.name]ckli[user.name]t
- [ ] ใช้ Typ[user.name]Sc[user.name]ipt
- [ ] Fold[user.name][user.name] [user.name]t[user.name][user.name]ct[user.name][user.name][user.name] ที่เหมาะสม
- [ ] Co[user.name]po[user.name][user.name][user.name]t co[user.name]po[user.name]itio[user.name] ที่ดี
- [ ] St[user.name]t[user.name] [user.name][user.name][user.name][user.name]g[user.name][user.name][user.name][user.name]t ที่เหมาะสม
- [ ] E[user.name][user.name]o[user.name] h[user.name][user.name]dli[user.name]g
- [ ] Lo[user.name]di[user.name]g [user.name]t[user.name]t[user.name][user.name]
- [ ] R[user.name][user.name]po[user.name][user.name]iv[user.name] d[user.name][user.name]ig[user.name]
- [ ] Acc[user.name][user.name][user.name]ibility
- [ ] P[user.name][user.name]fo[user.name][user.name][user.name][user.name]c[user.name] opti[user.name]iz[user.name]tio[user.name]
- [ ] T[user.name][user.name]ti[user.name]g cov[user.name][user.name][user.name]g[user.name]
Skill สำหรับพัฒนา Frontend applications ครอบคลุม 4 frameworks หลัก พร้อม best practices
src/ ├── app/ │ ├── core/ # Singleton services, guards, interceptors │ │ ├── services/ │ │ ├── guards/ │ │ └── interceptors/ │ ├── shared/ # Shared components, pipes, directives │ │ ├── components/ │ │ ├── pipes/ │ │ └── directives/ │ ├── features/ # Feature modules │ │ ├── auth/ │ │ ├── dashboard/ │ │ └── users/ │ └── app.component.ts ├── assets/ └── environments/
// Standalone Component with Signals (Angular 17+) import { toSignal } from "@angular/core/rxjs-interop"; @Component({ selector: "app-user-list", standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: ` @for (user of users(); track user.id) { <div>{{ user.name }}</div> } `, }) export class UserListComponent { private userService = inject(UserService); // ใช้ toSignal() แทน effect() + subscribe users = toSignal(this.userService.getUsers(), { initialValue: [] }); }
src/ ├── components/ # Shared/reusable components │ ├── ui/ # Basic UI components │ └── layout/ # Layout components ├── features/ # Feature-based modules │ ├── auth/ │ │ ├── components/ │ │ ├── hooks/ │ │ └── api.ts │ └── users/ ├── hooks/ # Shared custom hooks ├── lib/ # Utilities, helpers ├── services/ # API services └── stores/ # State management (Zustand/Redux)
// Custom Hook Pattern function useUsers() { const [users, setUsers] = useState<User[]>([]); const [loading, setLoading] = useState(true); const [error, setError] = useState<Error | null>(null); useEffect(() => { fetchUsers() .then(setUsers) .catch(setError) .finally(() => setLoading(false)); }, []); return { users, loading, error }; } // React Query Pattern function useUsers() { return useQuery({ queryKey: ["users"], queryFn: fetchUsers, staleTime: 5 * 60 * 1000, }); }
src/ ├── components/ # Shared components │ ├── ui/ │ └── layout/ ├── composables/ # Composition API functions ├── views/ # Page components ├── stores/ # Pinia stores ├── services/ # API services ├── router/ └── assets/
<script setup> syntax<script setup lang="ts"> import { ref, computed, onMounted } from "vue"; import { useUserStore } from "@/stores/user"; // Props & Emits const props = defineProps<{ userId: number; }>(); const emit = defineEmits<{ (e: "select", user: User): void; }>(); // Composables const userStore = useUserStore(); // Reactive State const searchQuery = ref(""); // Computed const filteredUsers = computed(() => userStore.users.filter((u) => u.name.includes(searchQuery.value)), ); // Lifecycle onMounted(() => { userStore.fetchUsers(); }); </script>
src/ ├── app/ # App Router │ ├── (auth)/ # Route groups │ │ ├── login/ │ │ └── register/ │ ├── dashboard/ │ │ ├── page.tsx │ │ ├── layout.tsx │ │ └── loading.tsx │ ├── api/ # API Routes │ │ └── users/ │ ├── layout.tsx │ └── page.tsx ├── components/ │ ├── ui/ │ └── features/ ├── lib/ # Utilities └── services/ # API services
// Server Component (default) async function UsersPage() { const users = await fetchUsers(); // Server-side return ( <div> <UserList users={users} /> <AddUserButton /> {/* Client Component */} </div> ); } // Client Component ("use client"); function AddUserButton() { const [open, setOpen] = useState(false); return <button onClick={() => setOpen(true)}>Add User</button>; } // Server Action async function createUser(formData: FormData) { "use server"; const name = formData.get("name"); await db.users.create({ name }); revalidatePath("/users"); }