Setting state from child components

Juyeon Lee·2022년 5월 4일
0

REACT 리액트

목록 보기
26/65

Star image 부분을 따로 component로 만들어 분리하고
Onclick이 되게 만들어보는 연습..

Star.js

import React from "react"

export default function Star(props) {
    const starIcon = props.isFilled ? "star-filled.png" : "star-empty.png"
    return (
        <img 
            src={`../images/${starIcon}`} 
            className="card--favorite"
            onClick={props.handleClick}
        />
    )
}

props 써주고 return에 저 부분까지 옮기는거까지는 했는데

const starIcon = props.isFilled ? "star-filled.png" : "star-empty.png"

이 부분 하는걸 놓침... 그리고 첫번째부분을 props.isFiled라고
설정해주는것도 혼자 못했음 :(

App.js

import React from "react"
import Star from "./Star"

export default function App() {
    const [contact, setContact] = React.useState({
        firstName: "John",
        lastName: "Doe",
        phone: "+1 (719) 555-1212",
        email: "itsmyrealname@example.com",
        isFavorite: true
    })
    
    function toggleFavorite() {
        setContact(prevContact => ({
            ...prevContact,
            isFavorite: !prevContact.isFavorite
        }))
    }
    
    return (
        <main>
            <article className="card">
                <img src="./images/user.png" className="card--image" />
                <div className="card--info">
                    <Star isFilled={contact.isFavorite} handleClick={toggleFavorite} />
                    <h2 className="card--name">
                        {contact.firstName} {contact.lastName}
                    </h2>
                    <p className="card--contact">{contact.phone}</p>
                    <p className="card--contact">{contact.email}</p>
                </div>
                
            </article>
        </main>
    )
}

위의 코드에서 바로 이부분

<Star isFilled={contact.isFavorite} handleClick={toggleFavorite} />

혼자 칠수가 없었음..휴 아직 props에 대한 공부를 더 깊게 해야하나봄ㅠㅠ
코드 보면 이해는 가는데 혼자 해보려고 하면 못치겠음ㅠ
참고로 eventlistener 살펴보면 여기서는 Star.js에 star가 있기
때문에 App.js에서는 저렇게 handleClick으로 설정해주고
Star.js에서는 원래와 같이 onClick으로 설정해주면 됨.

 onClick={props.handleClick}

props로 가져오기때문에 props.handleClick

0개의 댓글