이벤트 처리기 추가 및 상태 업데이트
애플리케이션의 핵심 구성 요소(App
)에 상태를 저장하면 중요한 모든 속성의 현재 값을 읽을 수 있습니다. 각 구성 요소를 조작하지 않아도 됩니다. 이벤트를 중앙에서 처리하여 데이터가 한 위치에서만 수정되도록 할 수도 있습니다.
시나리오
애플리케이션 사용자가 항목을 완료하면 재료 목록에서 해당 항목을 탭할 수 있게 하려고 합니다. 상태에서 항목을 prepared
로 표시합니다. 이 설정은 애플리케이션 전체에 반영됩니다. 값이 변경되면 구성 요소는 업데이트를 감지하고 필요에 따라 다시 평가합니다.
클릭 이벤트에 대한 메서드 추가
App.jsx 파일을 엽니다.
ingredientClick
이라는 이벤트 수신기를 만듭니다.TODO: Create ingredientClick event listener
라는 주석 아래에 추가합니다.function ingredientClick(index) { const updatedRecipe = { ... recipe }; updatedRecipe.ingredients[index].prepared = !updatedRecipe.ingredients[index].prepared; setRecipe(updatedRecipe); }
spread 연산자를 사용하여
recipe
복사본을 만드는 것으로 논리가 시작됩니다.index
를 사용하여 업데이트된ingredient
를 검색합니다.prepared
의 값을 반대로 바꿉니다. 마지막으로,setRecipe
를 사용하여 상태의recipe
개체를 바꿉니다.레시피 재료를 표시하는 구성 요소인
IngredientList
를 추가합니다. 이렇게 하려면TODO: Pass ingredients and event listener to IngredientList
라는 주석 뒤에 다음 코드를 추가합니다.<IngredientList ingredients={recipe.ingredients} onClick={ ingredientClick } />
다른 모든 속성과 마찬가지로
ingredientClick
함수를 구성 요소에 전달할 수 있습니다.
이벤트 수신기를 사용하도록 IngredientList 업데이트
React에서 속성(또는 props)은 함수를 비롯한 모든 JavaScript 형식일 수 있습니다. 따라서 이벤트 처리기를 속성으로 설정할 수 있습니다. 이 설정을 통해 중앙 집중식 이벤트 처리가 가능합니다.
앞에서 만든 ingredientClick
함수를 사용하도록 IngredientList
를 업데이트하겠습니다.
IngredientList.jsx 파일을 엽니다. 기존 구성 요소를 확인합니다. 이 구성 요소를 사용하여 이벤트 사용 방법을 확인할 것입니다.
TODO: Add onClick event
주석 아래에 다음 JSX를 추가합니다.onClick={ () => props.onClick(index) }
속성
onClick
함수에 매개 변수를 전달할 수 있습니다.참고
구성 요소
props
에서 사용한onClick
이름에 특별한 이유는 없습니다. 임의로 선택한 이름으로, 이전에 App.jsx 파일에서 전달되었습니다.
페이지 테스트
- 모든 파일을 저장합니다.
- 브라우저로 돌아가서 페이지를 새로 고칩니다. 재료를 선택하면 취소선 상태가 변경됩니다. 상태가 변경되는 것은
prepared
속성이 업데이트되기 때문입니다.