[Reactð£ ]宣èšçUIã®æ§ç¯ãã·ã³ãã«ãªããã»ã¹ã§ç解ãã
ãã®èšäºã§è©±ãããš
ãã®èšäºã§ã¯Reactå
¥éè
ã®æ¹ãUIã®ç¶æ
管çã«ã€ããŠããæ©ãã§ããŸã人ã察象ã«æžããŠããŸãã
ãããªãè€éãªç¶æ
管çãèãåºãã®ã§ã¯ãªãããããã宣èšçUIã®æ§ç¯ããã»ã¹ãé ã®äžã«çœ®ããŠãã®ã³ã³ããŒãã³ãã®ç¶æ
ãç¹å®ããæŽçããããšã§ç®¡çããç¶æ
ãæ確ã«ããŸãâºïž
宣èšçUIã®æ§ç¯ããã»ã¹ãéããreactå ¥éã»åå¿è ããããªãç¶æ 管çãèãåºããŠæãåããªããªãç¶æ ãè±åŽããããšãç®çã«ããŠããŸãã
宣èšçUIã®æ§ç¯ããã©ãŒã ã³ã³ããŒãã³ããäŸã«ïŒSTEPã§ç解ãã
ä»åã¯ãå ¥åå€ãéä¿¡ããããã¹ãå ¥åãã©ãŒã ããäŸã«ãšã£ãŠ4stepã§ããã»ã¹ãç解ãã
- ã³ã³ããŒãã³ãã®ç¶æ ãåæããŠã¿ã
- ç¶æ å€åã®ãã£ããã®ããªã¬ãŒãç¹å®ããŠããããŒãäœã
- useStateã䜿ã£ãŠç¶æ ã宣èšãã
- ç¶æ ã®ãªãã¡ã¯ã¿ãªã³ã°ïŒä»åã¯äžèŠã»éèŠã§ãªãç¶æ å€æ°ãåé€ããïŒ
ç®æšïŒæåããç¶æ 管çã®ãã¹ããã©ã¯ãã£ã¹ãèããã®ã§ã¯ãªãããŸãã¯å®£èšçUIã®ç解ãæ·±ãããå¿ èŠãªç¶æ ãæŽçããŠãSTEPïŒãç¶æ ã®ãªãã¡ã¯ã¿ãªã³ã°ããšãã段éãèšããããšã§ç®¡çãã¹ãç¶æ ãæããã«ããããšã
STEPïŒã³ã³ããŒãã³ãã®ç¶æ ãåæããŠã¿ã
ä»åã®å
¥åãã©ãŒã ã®ç¶æ
ã¯ä»¥äžãèããããŸã
ã»EmptyïŒæªå
¥åïŒïŒãã©ãŒã ã®ãéä¿¡ããã¿ã³ãç¡å¹ãªç¶æ
ã»å
¥åäžïŒãã©ãŒã ã®ãéä¿¡ããã¿ã³ãæå¹ãªç¶æ
ã»éä¿¡äžïŒå
¥åã¯ç¡å¹ã«ãªã£ãŠãããéä¿¡äžã®ç»é¢ã衚瀺ãããŠããç¶æ
ã»æåïŒç»é¢ã«ãéä¿¡å®äºããŸãããã®ã¡ãã»ãŒãžã衚瀺ããã
ã»ErrorïŒç»é¢ã«ãé信倱æããŸãããã®ã¡ãã»ãŒãžã衚瀺ããã
äžèšã§æãã以å€ã«ãç²åºŠã现ããããã°æŽã«å€ãã®ç¶æ ãæããããŸãããæäœéã®ç¶æ ãåæããããšããŸãã¯ç®æšã«ããã®ãããã§ããããããã§ã®æäœéã¯ç»é¢äžã§èŠèŠã§ç¢ºèªã§ããç¶æ ãç¶²çŸ ã§ãããŸã§åæããããšdesuðïŒ
STEPïŒç¶æ å€åã®ãã£ããã«ãªãããªã¬ãŒãç¹å®ããŠããããŒãäœã
ç¶æ å€åã®ããªã¬ãŒã¯ïŒçš®é¡ã«åããŠèããããŸã
ã»ãã¥ãŒãã³ã€ã³ãããïŒäººéã«ããå
¥å
ã»ã³ã³ãã¥ãŒã¿å
¥åïŒã³ã³ãã¥ãŒã¿ã«ããå
¥å
äŸãã°
人éã«ããå
¥åã¯ãããã¹ãå
¥åãããã¿ã³ãã¯ãªãã¯ã
ã³ã³ãã¥ãŒã¿ã«ããå
¥åã¯ãHTTP ãªã¯ãšã¹ãã»ã¬ã¹ãã³ã¹ã®ããåããããè€éãªåŠçã®èšç®ã
ðãç¶æ ããåæããŠãããšãã¶ã€ããŒã»ã¯ã©ã€ã¢ã³ãããéãšã®å ±éèªèãæ§ç¯ããããã®å©ãã«ãªãã®ã§draw.ioãªã©ã䜿ã£ãŠæŽçããŠãããšãããšæããŸãã
ðUIã®ç¶æ ã足ãããã«é¡§å®¢éãšã®å ±éèªèãç¯ãããããèžãŸããŠããã¯ãšã³ãã®äººãšã©ã®ããã«ããŒã¿æ§é ã«èœãšãã¹ãããèããã®ãè¯ããšæããŸãã
ðð»è€æ°ã®ç¶æ
ããã€ã³ã³ããŒãã³ããããå Žåã¯ãããããïŒããŒãžã«åæããŠè¡šç€ºãããšå
±éèªèã®ããã®ç解ãåŸãã®ã«åœ¹ç«ã¡ãŸãïŒãã®ããŒãžã«äŒŒããã®ãããŒã«ãšããŠããã®ã§æ°ã«ãªãæ¹ã¯ãã¹ããŒãªãŒããã¯ããªã©ã§æ€çŽ¢ããŠã¿ãŠãã ããïŒ
â
import Form from './Form.js';
â
//ã³ã³ããŒãã³ãã®ç¶æ
ãããããããåæãããã¡ã€ã«
â
let statuses = [
'empty',
'typing',
'submitting',
'success',
'error',
];
â
export default function App() {
return (
<>
{statuses.map(status => (
<section key={status}>
<h4>Form ({status}):</h4>
<Form status={status} />
</section>
))}
</>
);
}
â
export default function Form({
// Try 'submitting', 'error', 'success':
status = 'empty'
}) {
if (status === 'success') {
return <h1>That's right!</h1>
}
return (
<>
<h2>City quiz</h2>
<p>
In which city is there a billboard that turns air into drinkable water?
</p>
<form>
<textarea disabled={
status === 'submitting'
} />
<br />
<button disabled={
status === 'empty' ||
status === 'submitting'
}>
Submit
</button>
{status === 'error' &&
<p className="Error">
Good guess but a wrong answer. Try again!
</p>
}
</form>
</>
);
}
â
STEPïŒuseStateã䜿ã£ãŠç¶æ ã宣èšãã
ç¶æ ã¯å€åãããã®ã§ããã€ãŸããåçã§ããããç¶æ ãå¢ããã»ã©èããã¹ãããšã¯å¢ããŸããäžèŠãªç¶æ ãå¢ããããšã¯ãæŽæ°å¿ããèæ ®æŒãã®åå ã«ãªããã°ã®çºçãç£ãã®ã§ããç¶æ ãã¯ã§ããã ãå°ãªãããããšãå¿ãããŸãããã
ã»ãç¶æ
ãã¯ã§ããã ãå°ãªãããããšãå¿ããã
ã»çµ¶å¯Ÿã«ããã¯ãã®ç¶æ
ããå§ãã
ã»èŠèŠçç¶æ
ã確å®ã«ã«ããŒã§ããŠãããèãã
絶察ã«ããã¯ãã®ç¶æ
ããå§ããã
ããšãã°ãå
¥åçšã«ãä¿åããæåŸã®ãšã©ãŒãä¿åããããã« (ååšããå Žå) ãä¿åããå¿
èŠããããŸã
const [answer, setAnswer] = useState('');
const [error, setError] = useState(null);
åãã¯çŽãã«ãã¹ããªæ¹æ³ãèŠã€ãããªãå Žåãã»ãšãã©ã§ãããŸãã¯å¯èœãªãã¹ãŠã®èŠèŠçç¶æ ã確å®ã«ã«ããŒãããããã«ãååãªç¶æ ãè¿œå ããããšããå§ããŸãã
const [isEmpty, setIsEmpty] = useState(true);
const [isTyping, setIsTyping] = useState(false);
const [isSubmitting, setIsSubmitting] = useState(false);
const [isSuccess, setIsSuccess] = useState(false);
const [isError, setIsError] = useState(false);
STEPïŒç¶æ ã®ãªãã¡ã¯ã¿ãªã³ã°ïŒäžèŠã»éèŠã§ãªãç¶æ å€æ°ãåé€ããïŒ
éèŠãã©ãããå€æããéã«ã¯äžèšãèæ ®ãããšããã§ããã
ã»ãã®ç¶æ ãççŸãåŒãèµ·ãããã©ããïŒ
ã»ãã®ç¶æ ãåæã«ååšããããšãã§ãããã©ãã
const [answer, setAnswer] = useState('');
const [error, setError] = useState(null);
const [status, setStatus] = useState('typing'); // 'typing', 'submitting', or 'success'
ããã 3 ã€ã®ç¶æ å€æ°ã¯ããã®ãã©ãŒã ã®ç¶æ ãååã«è¡šããŠããŸãããã ããå®å šã«ã¯æå³ããªããªãäžéç¶æ ããŸã ããã€ããããŸããç¶æ ãããæ£ç¢ºã«ã¢ãã«åããããã«ç¶æ ãreducer ã«æœåºããŠè€æ°ã®ç¶æ å€æ°ãåäžã®ãªããžã§ã¯ãã«çµ±åããŠãé¢é£ãããã¹ãŠã®ããžãã¯ãçµ±åããããšãã§ããŸã!
èŠçŽ
宣èšçUIã§ã³ã³ããŒãã³ãéçºãããå Žåã¯ïŒ
1.ã 察象ãšãªãã³ã³ããŒãã³ãã®ç¶æ
ãæŽãåºãåæããïŒæäœéïŒèŠèŠçç¶æ
ã¯ç¶²çŸ
ã§ããããã«ïŒ
2.ãç¶æ
ã®å€åã®ãã£ãããšãªãããªã¬ãŒãç¹å®ããŠãããŒãèµ·ãã
3.ãuseStateã§ç¶æ
ã宣èšãã
4.ãäžèŠã»éèŠã§ãªãç¶æ
ããªãã¡ã¯ã¿ãªã³ã°ãã
Next
ãç²ãæ§ã§ããã宣èšçUIã§ã®æå°åäœã®ã³ã³ããŒãã³ãã®æ§ç¯ããã»ã¹ãç解ã§ããã次ã¯ã³ã³ããŒãã³ãéã§ç¶æ
ãã©ã®ããã«å
±æããã®ãçãèããŠãããŸãããïŒïŒ
次ã®ãªãã¡ã¬ã³ã¹ã§æãããµã€ãã®ãã¥ãŒããªã¢ã«ããã£ãŠã¿ããšæŽã«ç解ãé²ããšæããŸãð¥³
è¯ããè²°ãããšèšäºãæžãã¢ããã«ç¹ããã®ã§å¬ããã§ãð¥ºïŒ
Reference
Discussion