問題一覧に戻る
上級パフォーマンス最適化
問題84: キーの最適化

Reactの調整パフォーマンスにおける安定したキーの重要性を学びます。配列インデックスをキーとして使用すると、ステートフルコンポーネントやアニメーションで問題が発生します。安定した一意のIDは、レンダリング間で適切なコンポーネントIDを保証します。悪いキーは不要なDOM操作とリスト並べ替え時のコンポーネント状態の喪失につながります。

import React, { useState } from 'react';

function TodoList() {
const [todos, setTodos] = useState([
{ text: 'Learn React' },
{ text: 'Build app' }
]);

const addTodo = (text) => {
{/* IDなしの悪い実践 */}
setTodos([...todos, { text }]);
};

const removeTodo = (index) => {
setTodos(todos.filter((_, i) => i !== index));
};

return (
<div>
{todos.map((todo, index) => (
{/* 不安定なインデックスキー */}
<div key={}>
<input defaultValue={todo.text} />
<button onClick={() => removeTodo(index)}>X</button>
</div>
))}
<button onClick={() => addTodo('New todo')}>Add</button>
</div>
);
}

{/* IDを使った良いアプローチ */}
function BetterTodoList() {
const [todos, setTodos] = useState([
{ id: .now(), text: 'Learn React' },
{ id: Date.now() + 1, text: 'Build app' }
]);

const addTodo = (text) => {
setTodos([...todos, { id: Date.(), text }]);
};

return (
<div>
{todos.map((todo) => (
{/* 安定した一意のキー */}
<div key={todo.}>
<input defaultValue={todo.text} />
</div>
))}
</div>
);
}

export default BetterTodoList;