본 캠프

리액트 숙련. (7)

Iruka913 2024. 11. 13. 20:40

신나는 알고리즘 풀이 시간

 

나의 답

function solution(lottos, win_nums) {
    const answer = [];
    let rightNum = 0;
    let countZero = 0;
    for (let i = 0; i < lottos.length; i++) {
        if (lottos[i] === 0) countZero++;
        if (win_nums.includes(lottos[i])) rightNum++;
    }
    const helper = (number) => {
        switch (number) {
            case 6:
                answer.push(1);
                break;
            case 5:
                answer.push(2);
                break;
            case 4:
                answer.push(3);
                break;
            case 3:
                answer.push(4);
                break;
            case 2:
                answer.push(5);
                break;
            default:
                answer.push(6);
                break;
        }
    };
    helper(countZero + rightNum);
    helper(rightNum);
    return answer;
}

 

문제는 쉽게 풀었다. switch문을 두 번씩이나 쓰는 게 너무 귀찮아서, 그냥 따로 헬퍼 함수를 만들어서 작업해주었다.

 

결국 0이 들어가있을 때 최저 순위와 최고 순위를 맞추라는 건, 0이 전부 맞았을 때와 0이 전부 틀렸을 때 두 가지이므로, 수식을 이렇게 사용하였다. 

비제어 컴포넌트

보통, 제어 컴포넌트로 하는 걸 리액트에선 권장한다고 했었지만 요즘엔 그런 것도 아닌 듯 하다.

 

더 편한 방법이 있다고 한다. 

import { useState } from "react";

function TodoListWithFormData() {
    const [todos, setTodos] = useState([]);

    const handleAddTodo = (e) => {
        e.preventDefault();
        const formData = new FormData(e.target);
        const newTodo = formData.get("todo").trim(); // 'todo' 필드 값 가져오기

        if (newTodo) {
            setTodos([...todos, newTodo]); // 새로운 항목 추가
            e.target.reset(); // 입력 필드 초기화
        }
    };

    return (
        <div>
            <h2>Todo List</h2>
            <form onSubmit={handleAddTodo}>
                <input type="text" name="todo" placeholder="Enter a task" />
                <button type="submit">Add</button>
            </form>

            <ul>
                {todos.map((todo, index) => (
                    <li key={index}>{todo}</li>
                ))}
            </ul>
        </div>
    );
}

export default TodoListWithFormData;

 

이렇게 하면 input에다가 일일히 onChangeHandler를 달아주지 않아도 된다. 또한, 리렌더링도 그만큼 적어지기 때문에, 페이지에 걸리는 과부하 역시 줄어든다. 

 

나 혼자서 crud를 만들어볼 때, 꽤나 유용하게 써 볼 수 있을 듯 하다. 

'본 캠프' 카테고리의 다른 글

뉴스 피드 프로젝트. (1)  (0) 2024.11.15
리액트 숙련. (8)  (2) 2024.11.14
리액트 숙련. (6)  (2) 2024.11.12
리액트 숙련. (5)  (0) 2024.11.11
리액트 숙련. (4)  (1) 2024.11.08