StateとHooks

中級
79
7時間54分

ReactのStateとHooksに関する練習問題

Reactコースの一部として、StateとHooksに関する実践的な練習問題を79問用意しています。 基礎から応用まで段階的に学習できるよう構成されています。

学習を開始する準備ができました

下記の練習問題から始めて、段階的にスキルアップしていきましょう

react icon

練習問題一覧 (79問)

問題 1

以下のコードで、タイマーを適切に停止するための記述はどれですか? ```jsx useEffect(() => { const interval = setInterval(() => { setSeconds(prev => prev - 1); }, 1000); // ここにクリーンアップ処理 }, []); ```

問題 2

useEffectで条件付きでAPIを呼び出す場合の正しい記述はどれですか?

問題 3

同一ドメインの異なるページ間でlocalStorageのデータはどのように扱われますか?

問題 4

useStateフックの初期値として設定できないものはどれですか?

問題 5

useEffectで非同期処理(API通信)を行う正しい方法はどれですか?

問題 6

パフォーマンス最適化のHooks(`useMemo`、`useCallback`)に関する適切な考え方はどれですか?

問題 7

以下のuseEffectの依存配列として最も適切なものはどれですか? ```jsx const [user, setUser] = useState(null); const [posts, setPosts] = useState([]); useEffect(() => { if (user) { fetchUserPosts(user.id); } }, /* ここに依存配列 */); ```

問題 8

useEffectフックが実行されるタイミングとして正しいものはどれですか?

問題 9

localStorageの特徴として**正しくない**ものはどれですか?

問題 10

以下のコードで何が起こりますか? ```jsx const [count, setCount] = useState(0); useEffect(() => { setCount(count + 1); }); ```

問題 11

Context APIの適切な使用場面として**最も適切でない**ものはどれですか?

問題 12

以下の`useReducer`のコードで、商品を追加する際に正しい`dispatch`の呼び出し方はどれですか? ```javascript function cartReducer(state, action) { switch (action.type) { case 'ADD_ITEM': return { ...state, items: [...state.items, action.item] }; default: return state; } } ```

問題 13

以下のコードで、ボタンを連続で3回クリックした場合の最終的なcountの値はどうなりますか? ```jsx const handleClick = () => { setCount(count + 1); setCount(count + 1); setCount(count + 1); }; ```

問題 14

以下のコードにおいて、リストが空の場合に表示される内容はどれですか? ```jsx {items.length === 0 ? ( <p>まだ項目がありません</p> ) : ( <ul>{/* リスト表示 */}</ul> )} ```

問題 15

以下のコードでボタンをクリックしたときの動作として正しいものはどれですか? ```jsx function Counter() { const [count, setCount] = useState(0); return ( <button onClick={() => setCount(count + 1)}> {count} </button> ); } ```

問題 16

以下のコードで、`localStorage.getItem('todos')`が`null`を返す場合はどのような状況ですか?

問題 17

useStateの初期値に関数を渡す利点として最も重要なのはどれですか?

問題 18

以下のコードでエラーハンドリングを追加する最も適切な場所はどこですか? ```javascript const [todos, setTodos] = useState(() => { const savedTodos = localStorage.getItem('todos'); if (savedTodos) { return JSON.parse(savedTodos); } return defaultTodos; }); ```

問題 19

Stateの更新において、以下のうち最も推奨される書き方はどれですか?

問題 20

以下のuseEffectで、ユーザーIDが変更されるたびにユーザー情報を取得したい場合、正しい記述はどれですか? ```jsx const [user, setUser] = useState(null); const [userId, setUserId] = useState(1); ```

問題 21

useEffectで非同期処理を行う際に、コンポーネントがアンマウントされた後の状態更新を防ぐ方法はどれですか?

問題 22

オブジェクトのStateで、計算されたプロパティ名を使った更新の書き方として正しいものはどれですか?

問題 23

localStorageを使ってデータを保存する際、オブジェクトや配列をそのまま保存できない理由は何ですか?

問題 24

useEffectでイベントリスナーを登録する際の正しいパターンはどれですか?

問題 25

Reactのcontrolledコンポーネントにおいて、input要素で必須となる2つの属性の組み合わせはどれですか?

問題 26

React Hooksを使用する際の重要なルールは何ですか?

問題 27

useEffectの依存配列に関数を含める場合の注意点として正しいものはどれですか?

問題 28

以下のコードで、ボタンをクリックした際の動作として正しいものはどれですか? ```jsx const [count, setCount] = useState(0); const increment = () => { setCount(count + 1); setCount(count + 1); }; ```

問題 29

以下のコードで、入力フィールドに文字を入力しても画面に反映されない理由はどれですか? ```jsx function TextInput() { const [text, setText] = useState(""); return ( <input value={text} onChange={(e) => console.log(e.target.value)} /> ); } ```

問題 30

入力フォームのバリデーション処理として、以下のコードの`trim()`メソッドの役割は何ですか? ```jsx const addItem = () => { if (newItem.trim() !== '') { setItems(prev => [...prev, newItem]); } }; ```

問題 31

以下のコードで、fetchDataが再作成されることによる無限ループを防ぐ方法はどれですか? ```jsx const MyComponent = () => { const [data, setData] = useState([]); const fetchData = async () => { const response = await fetch('/api/data'); setData(await response.json()); }; useEffect(() => { fetchData(); }, [fetchData]); }; ```

問題 32

`useContext`を使用する際、Providerで囲まれていないコンポーネントで`useContext`を呼び出すとどうなりますか?

問題 33

useEffectでクリーンアップ関数を使う主な目的は何ですか?

問題 34

配列のStateから特定の要素を削除する際の正しい書き方はどれですか?

問題 35

`useCallback`が解決する問題は何ですか?

問題 36

useEffectを使ってtodosステートが変更されるたびにlocalStorageに自動保存する場合、依存配列はどう書きますか?

問題 37

JSON.parseで文字列をオブジェクトに変換する際、無効なJSON文字列が渡されるとどうなりますか?

問題 38

`useMemo`の依存配列に何も指定しない場合、どのような動作になりますか?

問題 39

以下のチェックボックスコンポーネントで、正しく動作させるために必要な修正はどれですか? ```jsx function Checkbox() { const [isChecked, setIsChecked] = useState(false); return ( <input type="checkbox" checked={isChecked} onChange={() => setIsChecked(!isChecked)} /> ); } ```

問題 40

配列のStateに新しい要素を追加する際の正しい書き方はどれですか?

問題 41

以下のコードで、`e.target.value`の`e`は何を表していますか? ```jsx <input onChange={(e) => setName(e.target.value)} /> ```

問題 42

以下のコードで、localStorageからデータを取得してオブジェクトに変換する正しい方法はどれですか?

問題 43

Stateの更新が非同期である場合の正しい理解はどれですか?

問題 44

useEffectで複数のサイドエフェクトを管理する際のベストプラクティスはどれですか?

問題 45

以下のコードの問題点は何ですか? ```javascript function UserProfile({ userId }) { const [user, setUser] = useState(null); if (userId) { const [loading, setLoading] = useState(false); } return <div>{user?.name}</div>; } ```

問題 46

`useReducer`が`useState`よりも適している状況はどれですか?

問題 47

アプリ起動時にlocalStorageからデータを読み込む処理を実装する際、useStateの初期値にはどのような形式で関数を渡しますか?

問題 48

useStateを使用する際の命名規則として最も適切なものはどれですか?

問題 49

以下のコードで、初回起動時にlocalStorageにデータがない場合の動作として正しいのはどれですか? ```javascript const [todos, setTodos] = useState(() => { const savedTodos = localStorage.getItem('todos'); if (savedTodos) { return JSON.parse(savedTodos); } return [{ id: 1, text: "デフォルト", completed: false }]; }); ```

問題 50

以下のuseEffectで、処理が実行されるタイミングはいつですか? ```jsx useEffect(() => { console.log('実行されました'); }, []); ```

問題 51

Reactにおいて、Stateを直接変更してはいけない理由として最も適切なものはどれですか?

問題 52

useState の初期値として、空の配列を設定する正しい書き方はどれですか?

問題 53

以下のコードで「+10」ボタンをクリックした時の動作として正しいものはどれですか? ```jsx function Counter() { const [count, setCount] = useState(0); const addTen = () => { for (let i = 0; i < 10; i++) { setCount(count + 1); } }; return ( <button onClick={addTen}>+10</button> ); } ```

問題 54

複数のStateを管理する際、関連する値をオブジェクトにまとめる利点として**最も適切でない**ものはどれですか?

問題 55

以下のコードで、`useContext`を正しく使用しているものはどれですか? ```javascript const UserContext = createContext(); ```

問題 56

複数のStateを管理する場合の正しい書き方はどれですか?

問題 57

localStorageからデータを読み込む際に、データが存在しない場合やJSON解析でエラーが発生した場合の対処法として最も適切なのはどれですか?

問題 58

以下のコードの実行結果はどうなりますか? ```javascript const data = { name: "山田", age: 25 }; localStorage.setItem('user', data); const result = localStorage.getItem('user'); console.log(result); ```

問題 59

以下のコードで発生する問題は何ですか? ```jsx const [data, setData] = useState([]); useEffect(() => { fetch('/api/data') .then(response => response.json()) .then(result => setData(result)); }, [data]); ```

問題 60

複数のボタンが同じStateを更新する場合、最も効率的なコードの書き方はどれですか?

問題 61

APIからデータを取得する際に、ローディング状態を管理する一般的なパターンはどれですか?

問題 62

複数の入力項目がある場合のState管理方法として**最も適切でない**ものはどれですか?

問題 63

以下のコードの問題点は何ですか? ```javascript useEffect(() => { const savedTodos = localStorage.getItem('todos'); if (savedTodos) { setTodos(JSON.parse(savedTodos)); } }, []); ```

問題 64

以下のリスト表示で、`key`属性にインデックスを使用することの問題点として正しいものはどれですか? ```jsx {items.map((item, index) => ( <li key={index}>{item}</li> ))} ```

問題 65

以下のコンポーネントで、ボタンをクリックしたときに期待通りに動作しないのはなぜですか? ```jsx function ToggleButton() { const [isOn, setIsOn] = useState(false); const handleToggle = () => { isOn = !isOn; // この行に問題がある }; return ( <button onClick={handleToggle}> {isOn ? 'ON' : 'OFF'} </button> ); } ```

問題 66

以下の`useReducer`のreducer関数で重要な原則は何ですか? ```javascript function reducer(state, action) { switch (action.type) { case 'INCREMENT': return { count: state.count + 1 }; default: return state; } } ```

問題 67

localStorageに保存できるデータの容量制限について、一般的な制限はどの程度ですか?

問題 68

`useReducer`を使用する際、状態を更新するために呼び出す関数の名前は何ですか?

問題 69

ReactのuseStateフックを使用する際の正しい記述はどれですか?

問題 70

`useMemo`と`useCallback`の違いとして正しいものはどれですか?

問題 71

`useContext`が解決する主要な問題は何ですか?

問題 72

以下のStateの更新処理で、最も効率的で推奨される書き方はどれですか?

問題 73

useState内で関数を初期値として設定する正しい方法はどれですか?

問題 74

オブジェクトのStateの一部を更新する際の正しい書き方はどれですか?

問題 75

以下のコードで、入力欄に「Hello」と入力した場合、画面に表示される内容はどうなりますか? ```jsx const [text, setText] = useState(''); return ( <div> <input value={text} onChange={(e) => setText(e.target.value)} /> <p>入力内容: {text}</p> </div> ); ```

問題 76

useEffectでlocalStorageへの保存処理を行う際、空の依存配列`[]`を使用するとどのような動作になりますか?

問題 77

`useCallback`の依存配列に含めるべき値は何ですか?

問題 78

以下のmapメソッドを使った配列の表示において、`key`属性が必要な理由として正しいものはどれですか? ```jsx {items.map((item, index) => ( <li key={index}>{item}</li> ))} ```

問題 79

`useMemo`の主な用途は何ですか?

💡 学習のコツ

  • • 順番に取り組むことで、段階的に理解を深めることができます
  • • 間違えた問題は解説をしっかり読んで理解しましょう
  • • 全問題完了後、もう一度チャレンジして定着を確認しましょう

📚 学習の進め方

1

問題を順番に解く

基礎から応用へと段階的に構成されているため、順番に取り組むことをお勧めします

2

解説をしっかり読む

正解・不正解に関わらず、解説を読んで理解を深めましょう

3

復習で定着させる

間違えた問題は後日再チャレンジして、知識の定着を確認しましょう

前のトピック

JSXとコンポーネント

次のトピック

TypeScript統合

さらに効果的な学習を

プレミアムプランでは、進捗管理、間違えた問題の自動復習リスト、詳細な解説動画など、 より充実した学習体験をご利用いただけます。