React에서 단일 진실 공급원

React 애플리케이션의 모든 변경 가능한 데이터에는 하나의 진실 공급원이 있어야 합니다. 이 말은, 두 개의 상태가 있고 하나의 상태가 다른 하나를 통해 계산될 수 있다면, 그중 하나는 불필요하므로 제거해야 한다는 의미입니다.

예를 들어 이를 논의해 봅시다. 예를 들어, 두 개의 입력 필드가 있다고 가정합니다: 첫 번째에는 화씨 온도를 입력하고, 두 번째에는 섭씨 온도를 입력합니다. 우리는 두 입력 필드가 동기화되기를 원합니다: 한 입력 필드에 온도를 입력하면 두 번째 입력 필드도 그에 따라 변경되어야 합니다.

잘못된 접근 방식은 두 개의 상태를 도입하는 것입니다: 하나는 화씨 온도를 위한 상태, 다른 하나는 섭씨 온도를 위한 상태입니다. 왜 잘못되었나요: 왜냐하면 하나의 온도는 다른 하나로부터 계산되므로, 데이터 저장소는 하나의 상태여야 하기 때문입니다.

Задание 1

설명된 과제를 구현하세요.

Задание 2

어떤 프로그래머가 배열 요소의 합계를 출력하는 다음 코드를 작성했습니다:

jsxfunction getSum(arr) {
  let res = 0;
  
  for (let elem of arr) {
    res += +elem;
  }
  
  return res;
}

function Calculator() {
  const [value, setValue] = useState('');
  const [nums, setNums] = useState([1, 2, 3]);
  const [sum, setSum] = useState(6); // 배열 nums 요소의 합계
  
  function handleChange(event) {
    setValue(event.target.value);
  }
  
  function handleBlur(event) {
    setNums([...nums, event.target.value]); // 배열에 요소 추가
    setSum(getSum([...nums, event.target.value])); // 합계 재계산
  }
  
  return <div>
    <p>{sum}</p>
    <input value={value} onChange={handleChange} onBlur={handleBlur} />
  </div>;
}

이 코드의 문제점은 무엇인가요? 수정하세요.

Задание 3

어떤 프로그래머가 배열 요소 편집을 위해 다음 코드를 작성했습니다:

jsxfunction App() {
  const [notes, setNotes] = useState([1, 2, 3, 4, 5]);
  const [editNum, setEditNum] = useState(null);
  const [value, setValue] = useState('');
  
  const result = notes.map((note, index) => {
    return <p key={index} onClick={() => startEdit(index)}>
      {note}
    </p>;
  });
  
  function startEdit(index) {
    setEditNum(index);
    setValue(notes[index]); // 편집 중인 요소의 텍스트를 별도 상태에 기록
  }
  
  function changeItem(event) {
    setValue(event.target.value);
    setNotes([...notes.slice(0, editNum), event.target.value,...notes.slice(editNum + 1)]);
  }
  
  return <div>
    {result}
    <input value={value} onChange={changeItem} />
  </div>;
}

이 코드의 문제점은 무엇인가요? 수정하세요.