ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [react] props (2)
    react+vue 2022. 9. 24. 20:40

    데이터 여러개 전달하기

    import { useEffect, useState } from "react";
    import Footer from "../components/footer";
    import Header from "../components/header";
    import Home from "../components/home";
    
    function HomePage() { 
    
        const [boards, setBoards] = useState([]);
        useEffect(() => {
            //board다운로드
            let datas = [
                { id: 1, name: "길동", content: "가나다" },
                { id: 2, name: "꺽정", content: "마바사" }
            ];
            setBoards([...boards,...datas]);
         },[]);
        return (
            <div>
                <Header />
                <Home boards={boards} id={ 1} />
                <Footer/>
            </div>
        );
    };
    
    export default HomePage;
    
    • boards와 id 데이터를 전달하였다. 이런 방식으로 여러개의 데이터를 전달할 수 있다.

     

     

    구조분할 할당

    import styled from "styled-components";
    
    const HomeStyle = styled.div`
        background-color: pink;
        margin: 0 auto;
        text-align: center;
        font-size: 5rem;
    `;
    function Home(props) {
        const { boards } = props;
        console.log(boards);
        return <HomeStyle>ddd{ }</HomeStyle>;
    };
    export default Home;
    

    • id도 마찬가지로 const {id }= props;로 받아올 수 있다.
    • boards와 id 동시에 받기
    import styled from "styled-components";
    
    const HomeStyle = styled.div`
        background-color: pink;
        margin: 0 auto;
        text-align: center;
        font-size: 5rem;
    `;
    function Home(props) {
        const { boards,id } = props;
        console.log(boards,id);
        return <HomeStyle>ddd{ }</HomeStyle>;
    };
    export default Home;
    

    id는 undefined로 출력되었다. 아마 배열이 아니라서 그런 것 같다.

     

     

    props 출력하기

    import styled from "styled-components";
    
    const HomeStyle = styled.div`
        background-color: pink;
        margin: 0 auto;
        text-align: center;
        font-size: 5rem;
    `;
    function Home(props) {
        const { boards,id } = props;
        console.log(boards,id);
        return( 
            <HomeStyle>
                홈 내부
                {boards.map((board) => <h3>내용:{ board.content}</h3>)}
            </HomeStyle>);
    };
    export default Home;
    

     

     

    props passing

    props passing을 해봤다.

    데이터를 다른 컴포넌트로 넘기는 기법을 props passing이라고 하며, 컴포넌트는 해당 데이터를 인자 props로 받아 가공하여 화면에 표현할 수 있다.

     

     

    삭제 버튼 만들기

    • deleteBoards 만들기
    function Home(props) {
        const { boards,id } = props;
        
        const deleteBoards = () => { 
            boards = [];
        };
        return( 
            <HomeStyle>
                홈 내부
                <button onClick={ deleteBoards}>전체 삭제</button>
                {boards.map((board) => <h3>내용:{ board.content}</h3>)}
            </HomeStyle>);
    };
    export default Home;
    

    작동하지 않는다. boards는 상태변수로 정의 되어 props로 넘겨받았다. 수정하기 위해서는 setBoards가 필요한 상황이다.

    props로 함수도 넘겨줄 수 있으므로 setBoards로 넘겨준다.

    • homPage.js
    import { useEffect, useState } from "react";
    import Footer from "../components/footer";
    import Header from "../components/header";
    import Home from "../components/home";
    
    function HomePage() { 
    
        const [boards, setBoards] = useState([]);
        useEffect(() => {
            //board다운로드
            let datas = [
                { id: 1, name: "길동", content: "가나다" },
                { id: 2, name: "꺽정", content: "마바사" }
            ];
            setBoards([...boards,...datas]);
         },[]);
        return (
            <div>
                <Header />
                <Home boards={boards} setBoards={ setBoards} />
                <Footer/>
            </div>
        );
    };
    
    export default HomePage;
    
    • home.js
    import styled from "styled-components";
    
    const HomeStyle = styled.div`
        background-color: pink;
        margin: 0 auto;
        text-align: center;
        font-size: 5rem;
    `;
    function Home(props) {
        const { boards,setBoards } = props;
        
        
        return( 
            <HomeStyle>
                홈 내부
                <button onClick={ ()=>setBoards([])}>전체 삭제</button>
                {boards.map((board) => <h3>내용:{ board.content}</h3>)}
            </HomeStyle>);
    };
    export default Home;
    

    구조분할 할당으로 setBoards로 받아준다. onClick 에 setBoards를 실행하는 함수를 넣어주면 실행된다.

     

     

    데이터 흐름

    • homPage는 home의 부모 컴포넌트다.
    • 그래서 home으로 데이터를 전달할 수 있다.
    • homPage의 코드가 읽혀지면서 home으로 데이터를 전달하는 코드가 읽히기 때문이다.
    • 하지만 home에서 hompage로 데이터를 전달하는 것은 불가능하다.
    • 자식에서 부모로는 데이터 전달이 불가능하다.
    • home 내부의 코드가 읽힐 때는 homePage의 코드가 다 읽힌 후이기 때문이다.

    'react+vue' 카테고리의 다른 글

    [react] 라우팅하기...2  (0) 2022.10.05
    [react] 라우팅하기  (0) 2022.10.04
    [react] props (1)  (0) 2022.09.23
    [react] useEffect가 두 번 실행되는 현상  (0) 2022.09.23
    [react] styled-components  (0) 2022.09.23

    댓글

Designed by Tistory.