⊗jsrtPmCoTOS 96 of 112 menu

React에서 단일 진실 공급원

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

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

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

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

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

function 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>; }

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

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

function 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>; }

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

한국어
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақКыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
우리는 웹사이트 운영, 분석 및 개인화를 위해 쿠키를 사용합니다. 데이터 처리는 개인정보 처리방침에 따라 이루어집니다.
모두 수락 설정 거부