実践:AIのReactコードをレビューする
なぜ学ぶか: Phase 02の総仕上げです。ここまで学んだ知識を使って、AIが生成しがちな「動くけど問題のあるコード」をレビューします。下の例には問題が3つ隠れています。まず自分で探してみてください。
まずはこの例を見てみましょう
function TodoApp({ initialTodos }: Props) {
const [todos, setTodos] = useState(initialTodos);
const [count, setCount] = useState(0); // 【?】
useEffect(() => { setCount(todos.length); }, [todos]); // 【?】
const addTodo = (text: string) => {
todos.push({ id: String(Date.now()), text }); // 【?】
setTodos(todos);
};
return (
<ul>
{todos.map((todo, index) => (
<li key={index}>{todo.text}</li> // 【?】
))}
</ul>
);
}答えは下の解説で。①countは計算で出せる ②pushは直接変更 ③keyがindex、の3点です。
問題①:いらないstateとuseEffect
countはtodos.lengthでその場で計算できます。stateもuseEffectも不要 — AIの過剰コードの代表です。
問題②:stateの直接変更
todos.push(...)は元の配列を直接変えています。Reactが変更に気づけないので、setTodos([...todos,新要素])と新しい配列を作ります。
問題③:key={index}
並べ替えや削除で表示が乱れます。key={todo.id}に直します。
指摘は「理由+依頼」で
「keyがindexだと削除時に乱れるので、todo.idに変えてください」— 理由を添えると、AIは正しく直せます。
ステップ 1 / 3
※ カリキュラムの内容はAIが生成しており、誤りが含まれる場合があります。正確な情報は公式ドキュメント等でご確認ください。