Reactã®useActionStateããã¯ã掻çšããŠããµãŒããŒã¢ã¯ã·ã§ã³ã«ãã£ãŠããªã¬ãŒãããã¹ããŒãæŽæ°ã管çããææ°ã®Reactã¢ããªã±ãŒã·ã§ã³ã«ããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãšããŒã¿åŠçãåäžãããŸãã
React useActionState: ãµãŒããŒã¢ã¯ã·ã§ã³ã«ãããã¹ããŒãæŽæ°ã®å¹çå
Reactã®ãµãŒããŒã¢ã¯ã·ã§ã³ã®å°å
¥ã¯ãReactã¢ããªã±ãŒã·ã§ã³å
ã§ã®ããŒã¿å€æŽãã€ã³ã¿ã©ã¯ã·ã§ã³ã®åŠçæ¹æ³ã«ããã倧ããªé²åã瀺ããŠããŸããuseActionState
ããã¯ã¯ããã®ãã©ãã€ã ã·ããã«ãããŠéèŠãªåœ¹å²ãæããããµãŒããŒäžã§ããªã¬ãŒãããã¢ã¯ã·ã§ã³ã®ç¶æ
ã管çããããã®ã¯ãªãŒã³ã§å¹ççãªæ¹æ³ãæäŸããŸãããã®èšäºã§ã¯ãuseActionState
ã®è€éããæãäžãããã®ç®çãå©ç¹ãå®çšçãªã¢ããªã±ãŒã·ã§ã³ãããã³ããå¹ççã§å¿çæ§ã®é«ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«ã©ã®ããã«è²¢ç®ããããæ¢ããŸãã
Reactã«ããããµãŒããŒã¢ã¯ã·ã§ã³ã®çè§£
useActionState
ã«é£ã³èŸŒãåã«ããµãŒããŒã¢ã¯ã·ã§ã³ã®æŠå¿µãææ¡ããããšãéèŠã§ãããµãŒããŒã¢ã¯ã·ã§ã³ã¯ããµãŒããŒäžã§çŽæ¥å®è¡ãããéåæé¢æ°ã§ãããéçºè
ã¯ãåå¥ã®APIã¬ã€ã€ãŒãå¿
èŠãšããã«ãããŒã¿å€æŽïŒããŒã¿ã®äœæãæŽæ°ããŸãã¯åé€ãªã©ïŒãå®è¡ã§ããŸããããã«ãããåŸæ¥ã®ã¯ã©ã€ã¢ã³ãåŽã®ããŒã¿ãã§ãããšæäœã«é¢é£ä»ãããããã€ã©ãŒãã¬ãŒãã³ãŒããäžèŠã«ãªããããã¯ãªãŒã³ã§ä¿å®ããããã³ãŒãããŒã¹ã«ã€ãªãããŸãã
ãµãŒããŒã¢ã¯ã·ã§ã³ã«ã¯ãããã€ãã®å©ç¹ããããŸãã
- ã¯ã©ã€ã¢ã³ãåŽã³ãŒãã®åæž: ããŒã¿å€æŽã®ããžãã¯ã¯ãµãŒããŒäžã«ååšãããããã¯ã©ã€ã¢ã³ãã§å¿ èŠãªJavaScriptã®éãæå°éã«æããããŸãã
- ã»ãã¥ãªãã£ã®åäž: ãµãŒããŒåŽã®å®è¡ã«ãããæ©å¯ããŒã¿ãŸãã¯ããžãã¯ãã¯ã©ã€ã¢ã³ãã«å ¬éãããªã¹ã¯ã軜æžãããŸãã
- ããã©ãŒãã³ã¹ã®åäž: äžèŠãªãããã¯ãŒã¯ãªã¯ãšã¹ããšããŒã¿ã®ã·ãªã¢ã«å/ãã·ãªã¢ã«åãæé€ããããšã§ãå¿çæéãççž®ã§ããŸãã
- éçºã®ç°¡çŽ å: APIãšã³ããã€ã³ããšã¯ã©ã€ã¢ã³ãåŽã®ããŒã¿ãã§ããããžãã¯ã管çããå¿ èŠããªããªããããéçºããã»ã¹ãå¹çåãããŸãã
useActionStateã®ç޹ä»: ã¢ã¯ã·ã§ã³ã®ç¶æ ã广çã«ç®¡çãã
useActionState
ããã¯ã¯ããµãŒããŒã¢ã¯ã·ã§ã³ã®çµæãšããŠçããã¹ããŒãæŽæ°ã®ç®¡çãç°¡çŽ åããããã«èšèšãããŠããŸããã¢ã¯ã·ã§ã³ã®ä¿çç¶æ
ã远跡ããããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒã衚瀺ãããšã©ãŒãåŠçããããã«å¿ããŠUIãæŽæ°ããæ¹æ³ãæäŸããŸãããã®ããã¯ã¯ããµãŒããŒåŽã®æäœã®é²è¡ç¶æ³ã«é¢ããæç¢ºãªãã£ãŒãããã¯ãæäŸããããšã«ããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããŸãã
useActionStateã®åºæ¬çãªäœ¿ãæ¹
useActionState
ããã¯ã¯ã次ã®2ã€ã®åŒæ°ãåãå
¥ããŸãã
- ã¢ã¯ã·ã§ã³: å®è¡ããããµãŒããŒã¢ã¯ã·ã§ã³é¢æ°ã
- åæç¶æ : ã¢ã¯ã·ã§ã³ã«ãã£ãп޿°ãããã¹ããŒãã®åæå€ã
次ã®ãã®ãå«ãé åãè¿ããŸãã
- æŽæ°ãããç¶æ : ã¹ããŒãã®çŸåšã®å€ãã¢ã¯ã·ã§ã³ãå®äºããåŸã«æŽæ°ãããŸãã
- ã¢ã¯ã·ã§ã³ãã³ãã©ãŒ: ãµãŒããŒã¢ã¯ã·ã§ã³ãããªã¬ãŒããããã«å¿ããŠã¹ããŒããæŽæ°ãã颿°ã
ç°¡åãªäŸã次ã«ç€ºããŸãã
import { useActionState } from 'react';
import { updateProfile } from './actions'; // updateProfileããµãŒããŒã¢ã¯ã·ã§ã³ã§ãããšä»®å®
function ProfileForm() {
const [state, dispatch] = useActionState(updateProfile, { success: false, error: null });
const handleSubmit = async (formData) => {
await dispatch(formData);
};
return (
);
}
ãã®äŸã§ã¯ãuseActionState
ã¯updateProfile
ãµãŒããŒã¢ã¯ã·ã§ã³ã®ç¶æ
ã管çããŸããhandleSubmit
颿°ã¯ãdispatch
颿°ã䜿çšããŠã¢ã¯ã·ã§ã³ãããªã¬ãŒããŸããstate
ãªããžã§ã¯ãã¯ãã¢ã¯ã·ã§ã³ã®ä¿çäžãã©ããããšã©ãŒãçºçãããã©ãããæ£åžžã«å®äºãããã©ãããªã©ãã¢ã¯ã·ã§ã³ã®é²è¡ç¶æ³ã«é¢ããæ
å ±ãæäŸããŸããããã«ãããé©åãªãã£ãŒãããã¯ããŠãŒã¶ãŒã«è¡šç€ºã§ããŸãã
useActionStateã®é«åºŠãªã·ããªãª
useActionState
ã®åºæ¬çãªäœ¿ãæ¹ã¯ç°¡åã§ãããã¹ããŒã管çãšãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®ããŸããŸãªåŽé¢ãåŠçããããã«ãããè€éãªã·ããªãªã§é©çšã§ããŸãã
ãšã©ãŒãšããŒãã£ã³ã°ç¶æ ã®åŠç
useActionState
ã®äž»ãªå©ç¹ã®1ã€ã¯ããšã©ãŒãšããŒãã£ã³ã°ç¶æ
ãã·ãŒã ã¬ã¹ã«åŠçã§ããããšã§ããã¢ã¯ã·ã§ã³ã®ä¿çç¶æ
ã远跡ããããšã«ãããããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒã衚瀺ããŠãã¢ã¯ã·ã§ã³ãé²è¡äžã§ããããšããŠãŒã¶ãŒã«éç¥ã§ããŸããåæ§ã«ãã¢ã¯ã·ã§ã³ã«ãã£ãŠã¹ããŒããããšã©ãŒããã£ãããããšã©ãŒã¡ãã»ãŒãžããŠãŒã¶ãŒã«è¡šç€ºã§ããŸãã
import { useActionState } from 'react';
import { createUser } from './actions';
function RegistrationForm() {
const [state, dispatch] = useActionState(createUser, { pending: false, error: null, success: false });
const handleSubmit = async (formData) => {
await dispatch(formData);
};
return (
);
}
ãã®äŸã§ã¯ãstate
ãªããžã§ã¯ãã«ã¯ãpending
ãerror
ãããã³success
ã®ããããã£ãå«ãŸããŠããŸããpending
ããããã£ã¯ãã¢ã¯ã·ã§ã³ãé²è¡äžã«éä¿¡ãã¿ã³ãç¡å¹ã«ããããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒã衚瀺ããããã«äœ¿çšãããŸããerror
ããããã£ã¯ãã¢ã¯ã·ã§ã³ã倱æããå Žåã«ãšã©ãŒã¡ãã»ãŒãžã衚瀺ããããã«äœ¿çšãããŸããsuccess
ããããã£ã¯ã確èªã¡ãã»ãŒãžã衚瀺ããŸãã
UIã®æ¥œèгçãªæŽæ°
楜芳çãªæŽæ°ãšã¯ããµãŒããŒãæŽæ°ã確èªããã®ãåŸ ã€ã®ã§ã¯ãªããã¢ã¯ã·ã§ã³ãæåãããã®ããã«UIãããã«æŽæ°ããããšã§ããããã«ãããã¢ããªã±ãŒã·ã§ã³ã®ç¥èŠãããããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããšãã§ããŸãã
useActionState
ã¯æ¥œèгçãªæŽæ°ãçŽæ¥å®¹æã«ããããã§ã¯ãããŸããããä»ã®ææ³ãšçµã¿åãããŠãã®å¹æãå®çŸã§ããŸãã1ã€ã®ã¢ãããŒãã¯ãã¢ã¯ã·ã§ã³ããã£ã¹ãããããåã«ããŒã«ã«ã§ã¹ããŒããæŽæ°ããã¢ã¯ã·ã§ã³ã倱æããå Žåã¯æŽæ°ãå
ã«æ»ãããšã§ãã
import { useActionState, useState } from 'react';
import { likePost } from './actions';
function Post({ post }) {
const [likes, setLikes] = useState(post.likes);
const [state, dispatch] = useActionState(likePost, { error: null });
const handleLike = async () => {
// UIãæ¥œèгçã«æŽæ°ãã
setLikes(likes + 1);
const result = await dispatch(post.id);
if (result.error) {
// ã¢ã¯ã·ã§ã³ã倱æããå Žåã«ã楜芳çãªæŽæ°ãå
ã«æ»ã
setLikes(likes);
console.error('æçš¿ã«ããã!ã§ããŸããã§ãã:', result.error);
}
};
return (
{post.content}
{state.error && {state.error}
}
);
}
ãã®äŸã§ã¯ãhandleLike
颿°ã¯ãlikePost
ã¢ã¯ã·ã§ã³ããã£ã¹ãããããåã«ãlikes
ã«ãŠã³ããæ¥œèгçã«ã€ã³ã¯ãªã¡ã³ãããŸããã¢ã¯ã·ã§ã³ã倱æããå Žåãlikes
ã«ãŠã³ãã¯å
ã®å€ã«æ»ãããŸãã
ãã©ãŒã éä¿¡ã®åŠç
useActionState
ã¯ããã©ãŒã éä¿¡ã®åŠçã«ç¹ã«é©ããŠããŸãããã©ãŒã ã®ç¶æ
ã管çããæ€èšŒãšã©ãŒã衚瀺ãããŠãŒã¶ãŒã«ãã£ãŒãããã¯ãæäŸããã¯ãªãŒã³ã§å¹ççãªæ¹æ³ãæäŸããŸãã
import { useActionState } from 'react';
import { createComment } from './actions';
function CommentForm() {
const [state, dispatch] = useActionState(createComment, { pending: false, error: null, success: false });
const handleSubmit = async (event) => {
event.preventDefault();
const formData = new FormData(event.target);
await dispatch(formData);
};
return (
);
}
ãã®äŸã§ã¯ãhandleSubmit
颿°ã¯ãããã©ã«ãã®ãã©ãŒã éä¿¡åäœã鲿¢ãããã©ãŒã ããŒã¿ããFormData
ãªããžã§ã¯ããäœæããŸããæ¬¡ã«ããã©ãŒã ããŒã¿ã䜿çšããŠcreateComment
ã¢ã¯ã·ã§ã³ããã£ã¹ãããããŸããstate
ãªããžã§ã¯ãã¯ãã¢ã¯ã·ã§ã³ãé²è¡äžã«ããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒã衚瀺ããã¢ã¯ã·ã§ã³ã倱æããå Žåã«ãšã©ãŒã¡ãã»ãŒãžã衚瀺ããããã«äœ¿çšãããŸãã
useActionStateã®ãã¹ããã©ã¯ãã£ã¹
useActionState
ã®å©ç¹ãæå€§éã«æŽ»çšããã«ã¯ã次ã®ãã¹ããã©ã¯ãã£ã¹ãæ€èšããŠãã ããã
- ã¢ã¯ã·ã§ã³ãç°¡æœã«ä¿ã€: ãµãŒããŒã¢ã¯ã·ã§ã³ã¯ãåäžã®æç¢ºã«å®çŸ©ãããã¿ã¹ã¯ã®å®è¡ã«çŠç¹ãåœãŠãå¿ èŠããããŸããåäžã®ã¢ã¯ã·ã§ã³å ã«è€éãªããžãã¯ãŸãã¯è€æ°ã®æäœãå«ããããšã¯é¿ããŠãã ããã
- ãšã©ãŒãé©åã«åŠçãã: ãµãŒããŒã¢ã¯ã·ã§ã³ã§å ç¢ãªãšã©ãŒåŠçãå®è£ ããŠãäºæããªããšã©ãŒãã¢ããªã±ãŒã·ã§ã³ãã¯ã©ãã·ã¥ãããªãããã«ããŸããäœãããŸããããªãã£ããããŠãŒã¶ãŒãçè§£ã§ããããã«ãæçãªãšã©ãŒã¡ãã»ãŒãžããŠãŒã¶ãŒã«æäŸããŸãã
- æå³ã®ããã¹ããŒãã䜿çšãã: ã¢ã¯ã·ã§ã³ã®ããŸããŸãªç¶æ ãæ£ç¢ºã«åæ ããããã«ã¹ããŒããªããžã§ã¯ããèšèšããŸããä¿çäžããšã©ãŒãæåãããã³ãã®ä»ã®é¢é£æ å ±ã®ããã®ããããã£ãå«ããŸãã
- æç¢ºãªãã£ãŒãããã¯ãæäŸãã:
useActionState
ã«ãã£ãŠæäŸãããã¹ããŒãæ å ±ã䜿çšããŠãæç¢ºã§æçãªãã£ãŒãããã¯ããŠãŒã¶ãŒã«æäŸããŸããããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒããšã©ãŒã¡ãã»ãŒãžãããã³æåã¡ãã»ãŒãžã衚瀺ããŠãã¢ã¯ã·ã§ã³ã®é²è¡ç¶æ³ã«ã€ããŠãŠãŒã¶ãŒã«åžžã«ç¥ãããŸãã - ã¢ã¯ã»ã·ããªãã£ãèæ ®ãã: ã¢ããªã±ãŒã·ã§ã³ãé害ã®ãããŠãŒã¶ãŒã«ãšã£ãŠã¢ã¯ã»ã¹å¯èœã§ããããšã確èªããŠãã ãããARIA屿§ã䜿çšããŠãã¢ã¯ã·ã§ã³ã®ç¶æ ãšãããã«ãã£ãŠåœ±é¿ãåããUIèŠçŽ ã«é¢ããè¿œå æ å ±ãæäŸããŸãã
åœéçãªèæ ®äºé
ã°ããŒãã«ãªãŒãã£ãšã³ã¹åãã«useActionState
ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãéçºããå ŽåãåœéåãšããŒã«ãªãŒãŒã·ã§ã³ãèæ
®ããããšãéèŠã§ããäž»ãªèæ
®äºé
ãæ¬¡ã«ç€ºããŸãã
- æ¥ä»ãšæå»ã®ãã©ãŒããã: æ¥ä»ãšæå»ããŠãŒã¶ãŒã®ãã±ãŒã«ã«åŸã£ãŠãã©ãŒããããããŠããããšã確èªããŸããæ¥ä»ãšæå»ã®ãã©ãŒããããæ£ããåŠçããã«ã¯ãé©åãªã©ã€ãã©ãªãŸãã¯APIã䜿çšããŸãã
- é貚ã®ãã©ãŒããã: ãŠãŒã¶ãŒã®ãã±ãŒã«ã«åŸã£ãŠé貚ããã©ãŒãããããŸããé貚ã®ãã©ãŒããããæ£ããåŠçããã«ã¯ãé©åãªã©ã€ãã©ãªãŸãã¯APIã䜿çšããŸãã
- æ°å€ã®ãã©ãŒããã: ãŠãŒã¶ãŒã®ãã±ãŒã«ã«åŸã£ãŠæ°å€ããã©ãŒãããããŸããæ°å€ã®ãã©ãŒããããæ£ããåŠçããã«ã¯ãé©åãªã©ã€ãã©ãªãŸãã¯APIã䜿çšããŸãã
- ããã¹ãã®æ¹å: å·Šããå³ïŒLTRïŒãšå³ããå·ŠïŒRTLïŒã®äž¡æ¹ã®ããã¹ãã®æ¹åããµããŒãããŸãã
direction
ãunicode-bidi
ãªã©ã®CSSããããã£ã䜿çšããŠãããã¹ãã®æ¹åãæ£ããåŠçããŸãã - ãšã©ãŒã¡ãã»ãŒãžã®ããŒã«ãªãŒãŒã·ã§ã³: ãšã©ãŒã¡ãã»ãŒãžãããŒã«ã©ã€ãºããŠããŠãŒã¶ãŒã®åªå èšèªã§è¡šç€ºãããããã«ããŸããããŒã«ãªãŒãŒã·ã§ã³ã©ã€ãã©ãªãŸãã¯APIã䜿çšããŠç¿»èš³ã管çããŸããããšãã°ãããããã¯ãŒã¯ãšã©ãŒãã¡ãã»ãŒãžã¯ããã©ã³ã¹èªã®ãErreur réseauããŸãã¯æ¥æ¬èªã®ããããã¯ãŒã¯ãšã©ãŒãã«ç¿»èš³ã§ããå¿ èŠããããŸãã
- ã¿ã€ã ãŸãŒã³: ã¿ã€ã ãŸãŒã³ã«æ³šæããŠãã ãããã¹ã±ãžã¥ãŒã«ãããã€ãã³ããŸãã¯ç· ãåããæ±ãå Žåã¯ããŠãŒã¶ãŒã®ããŒã«ã«ã¿ã€ã ãŸãŒã³ã§æå»ãä¿åããã³è¡šç€ºããŸãããŠãŒã¶ãŒã®ã¿ã€ã ãŸãŒã³ã«é¢ããåæãç«ãŠãããšã¯é¿ããŠãã ããã
useActionStateã®ä»£æ¿ææ®µ
useActionState
ã¯ããµãŒããŒã¢ã¯ã·ã§ã³ã®ã¹ããŒãæŽæ°ã管çããããã®åŒ·åãªããŒã«ã§ãããç¹å®ã®ããŒãºã«å¿ããŠæ€èšããå¿
èŠããã代æ¿ã¢ãããŒãããããŸãã
- åŸæ¥ã®ã¹ããŒã管çã©ã€ãã©ãªïŒReduxãZustandãJotaiïŒ: ãããã®ã©ã€ãã©ãªã¯ãããå
æ¬çãªã¹ããŒã管çã¢ãããŒããæäŸããè€æ°ã®ã³ã³ããŒãã³ãéã§ã¢ããªã±ãŒã·ã§ã³ã®ç¶æ
ã管çã§ããŸãããã ãã
useActionState
ã§ååãªåçŽãªãŠãŒã¹ã±ãŒã¹ã§ã¯ãéå°ã«ãªãå¯èœæ§ããããŸãã - Context API: Reactã®Context APIã¯ãããããããªãªã³ã°ãªãã§ã³ã³ããŒãã³ãéã§ã¹ããŒããå
±æããæ¹æ³ãæäŸããŸãããµãŒããŒã¢ã¯ã·ã§ã³ã®ç¶æ
ã管çããããã«äœ¿çšã§ããŸããã
useActionState
ãããå€ãã®ãã€ã©ãŒãã¬ãŒãã³ãŒããå¿ èŠã«ãªãå ŽåããããŸãã - ã«ã¹ã¿ã ããã¯: ç¬èªã®ã«ã¹ã¿ã ããã¯ãäœæããŠããµãŒããŒã¢ã¯ã·ã§ã³ã®ç¶æ
ã管çã§ããŸããããã¯ã
useActionState
ãŸãã¯ãã®ä»ã®ã¹ããŒã管çã©ã€ãã©ãªã§æºããããŠããªãç¹å®ã®èŠä»¶ãããå Žåã«é©ãããªãã·ã§ã³ã§ãã
çµè«
useActionState
ããã¯ã¯ãReactãšã³ã·ã¹ãã ãžã®è²Žéãªè¿œå ã§ããããµãŒããŒã¢ã¯ã·ã§ã³ã«ãã£ãŠããªã¬ãŒãããã¹ããŒãæŽæ°ã管çããããã®å¹ççã§åçåãããæ¹æ³ãæäŸããŸãããã®ããã¯ã掻çšããããšã«ãããéçºè
ã¯ã³ãŒãããŒã¹ãç°¡çŽ åãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããReactã¢ããªã±ãŒã·ã§ã³ã®å
šäœçãªããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸããåœéåã®ãã¹ããã©ã¯ãã£ã¹ãæ€èšããããšã§ãã°ããŒãã«ãªéçºè
ã¯ãã¢ããªã±ãŒã·ã§ã³ã倿§ãªãªãŒãã£ãšã³ã¹ã«ãšã£ãŠã¢ã¯ã»ã¹å¯èœã§äœ¿ããããããšãä¿èšŒã§ããŸãã
Reactãé²åãç¶ããã«ã€ããŠããµãŒããŒã¢ã¯ã·ã§ã³ãšuseActionState
ã¯ãææ°ã®Webéçºã«ãããŠãŸããŸãéèŠãªåœ¹å²ãæããå¯èœæ§ããããŸãããããã®æŠå¿µãç¿åŸããããšã§ãæä»£ã®å
ãè¡ããã°ããŒãã«ãªãŒãã£ãšã³ã¹ã®ããŒãºãæºããå
ç¢ã§ã¹ã±ãŒã©ãã«ãªReactã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸãã