props로 넘기기위해서
HomePage.js에
const [user,setUser]=useState({});
이렇게 하나를 만들어주고
useEffect에 데이터를 세팅해준다
setUser({id:1,username:'ssar'});
그리고 Home에 props로 넘겨준다
<Home boards={boards} setBoards={setBoards} number={number} setNumber={setNumber}
user={user}/>
이제 보냈으니 Home.js에서 구조분할 할당을 이용해서
user를 받아주면 된다
const{boards,setBoards,number,setNumber,user}= props;
부모로부터 스타일컴포넌트를 받았으면
Home에서는 밖에다가 적어서 쓰면된다
let StyledDeleteButton = styled.button`
color: ${(props)=>props.user.username ==='ssar'?"blue":"red"}
`;
이런식으로 작성해서 삼항연산자를 이용하는데 props로 받아왔으니까
props를 괄호안에 넣어주고 user.name이라는 것도 props로 받아왔으니
앞에 props.을 꼭 넣어줘야한다
준비가 되었으면
Delete 버튼 이라는 것을 만들고 username이 ssar이면 블루 아니면 레드 색상이 되도록
코드를 만들어준다
이제 원래있던 button을 위에서 만든 스타일컴포넌트 이름으로 변경해주고
안에 user라는 값을 넣어서 props로 부모로부터 구조분할할당으로 받아온 데이터를 넣어준다
<StyledDeleteButton user={user} onClick={()=>setBoards([])}>
전체삭제
</StyledDeleteButton>
이렇게되면 이름이 ssar이므로 blue컬러가 Home에서 이름을 바꾸면 레드컬러가 버튼에 들어온다
전체코드는 아래와같다
Homepage.js
import React, {useEffect, useState} from 'react';
import Header from "../components/Header";
import Footer from "../components/Footer";
import Home from "../components/home/Home";
const HomePage = () => {
//http 요청 (jquery ajax, fetch)
//db가 없으니 임의로 만들자
const [boards,setBoards]=useState([]);
const [number,setNumber]=useState(0);
const [user,setUser]=useState({});
//빈 배열 한번만 실행
useEffect(()=>{
//다운로드 가정 = fetch(),axios(),ajax()
let data = [
{id : 1, title:'제목1',content:'내용1'},
{id : 2, title:'제목2',content:'내용2'},
{id : 3, title:'제목3',content:'내용3'},
];
//빈데이터가 다운로드가 되기전에 먼저 들어가버린다
//그리고 다운로드가 완료되면 콜백되어서 setBoards에 다시 데이터가 들어간다
setBoards([...data]);
setUser({id:1,username:'cos'});
},[]);
return (
<div>
<Header/>
<Home boards={boards} setBoards={setBoards} number={number} setNumber={setNumber}
user={user}/>
{/*useEffect가 끝나면 우선 이곳에 빈데이터가 뿌려진다*/}
{/*위에 다운로드후 콜백이되면 상태변화가 생겨서 다시 그려지게된다*/}
{/*위에 setboards는 무조건 상태값이여야한다 그렇지않으면 다시 그려지지 않는다*/}
{/*위에 boards처럼 Home에 넘어간 데이터를 속성 즉 props라고 한다 */}
<Footer/>
</div>
);
};
export default HomePage;
Home.js
import React from 'react';
import styled from "styled-components";
//function 방식
//class 방식
//부모로부터 받아온 어떤 데이터를 가지고 스타일링을 동적으로 할것이라면?
let StyledDeleteButton = styled.button`
color: ${(props)=>(props.user.username ==='ssar'?"blue":"red")}
`;
const Home = (props) => {
//구조분할 할당
const{boards,setBoards,number,setNumber,user}= props;
return (
<div>
<h1>홈:{number}</h1>
<button onClick={()=>setNumber(number+1)}>번호증가</button>
<StyledDeleteButton user={user} onClick={()=>setBoards([])}>
전체삭제
</StyledDeleteButton>
{boards.map((board)=><h3>
제목 : {board.title} 내용 : {board.content}
</h3>)}
</div>
);
};
export default Home;
'FrontEnd' 카테고리의 다른 글
리액트 글쓰기,글목록보기 실습 (0) | 2022.11.16 |
---|---|
라우팅하기, 부트스트랩 적용 (react router dom) (1) | 2022.11.16 |
props 개념정리(변수,함수 passing하기) (0) | 2022.11.16 |
components styled 개념정리 (0) | 2022.11.16 |
useRef 개념정리 (0) | 2022.11.16 |