→ 라이브러리는 내 프로젝트에 필요한 코드를 가져와서 사용하는 건데, 리액트는 프레임워크보다는 라이브러리가 맞다. 공식 페이지에도 라이브러리라고 소개되어있다.
npm install react-router-dom —save
import React from "react";
import { BrowserRouter, Routes, Route } from "react-router-dom"
import Login from "./pages/Login/Login"
function Router() {
return(
<BouwserRouter>
<Routes>
<Route path="/" element={<Login />} />
</Routes>
</BouwserRouter>
)
}
export default Router;
index.js
ReactDOM.render(<Router />, document.getElementById('root'));
<App />
컴포넌트 대신에 <Router />
로 변경해야 한다.<Link>
컴포넌트<Link>
는 DOM에서 <a>
로 변환(compile)된다.<a>
태그처럼 지정한 경로로 바로 이동시킨다.<a>
: 외부 사이트로 이동<Link>
: 프로젝트 내 페이지로 이동import React from "react";
import { Link } from "react-router-dom";
function Login() {
return (
<div>
<Link to="/signup">회원가입</Link>
</div>
);
}
export default Login;
import React from "react";
import { useNavigate } from "react-router-dom";
function Login() {
const navigate = useNavigate();
const goToMain = () => {
if(로그인 로직~~){
navigate('/main');
}else {
alert("가입된 회원이 아닙니다.");
navigate("/signup");
}
};
return (
<div>
<button className="loginBtn" onClick={goToMain}>
로그인
</button>
</div>
);
}
export default Login;
Syntactically Awesome Style Sheets
npm install sass --save
.scss
SCSS : Sass 3버전에서 새롭게 나온 CSS의 상위집합
차이점 : 중괄호와 세미콜론의 유무
Sass는 선택자의 유효범위가 들여쓰기이다.
SCSS는 선택자의 유효범위가 {} 이다.
Sass와 거의 중괄호, 세미콜론의 차이이지만 @mixin 기능에서 차이가 난다.
출처)
//컴파일 안되는 주석이다. 컴파일 된 CSS코드를 보면 이 주석은 보인다.
/* 컴파일 되는 주석이다.
*컴파일 된 CSS코드를 보면 이 주석은 보이지 않는다.*/
//error
/* 컴파일되는
* 여러줄
주석 */
*
이 있어야 하며, *
의 라인을 반드시 맞춰야 한다!/*
scss는 줄 앞에 * 없어도 된다!
컴파일되는 주석이다.
*/
nav ul {
margin: 0;
padding: 0;
list-style: none;
}
nav li {
display: inline-block;
}
nav a {
display: block;
padding: 6px 12px;
text-decoration: none;
}
/*SCSS*/
nav {
ul {
margin: 0;
padding: 0;
list-style: none;
li {
display: inline-block;
}
}
a {
display: block;
padding: 6px 12px;
text-decoration: none;
}
}
.box {
font-weight: bold;
font-size: 10px;
font-family: sans-serif;
}
/*SCSS*/
.box {
font: {
weight: bold;
size: 10px;
family: sans-serif;
};
}
.btn {
position: absolute;
//.btn.active{color: red;}
&.active {
color: red;
}
}
.list {
li {
//.list li:last-child{margin-right: 0;}
&:last-child {
margin-right: 0;
}
}
}
.fs {
//.fs-small
&-small { font-size: 12px; }
//.fs-medium
&-medium { font-size: 14px; }
//.fs-large
&-large { font-size: 16px; }
}
$변수이름: 속성값;
$color : yellow;
.box {
border : 1px solid $color;
}
// SCSS
@mixin 믹스인이름 {
스타일;
}
@include 믹스인이름;
//----------------------
// Sass
=믹스인이름
스타일
+믹스인이름
// SCSS
@mixin large-text {
font-size: 22px;
font-weight: bold;
font-family: sans-serif;
}
// Sass
=large-text
font-size: 22px
font-weight: bold
font-family: sans-serif
// SCSS
h1 {
@include large-text;
}
div {
@include large-text;
}
// Sass
h1
+large-text
div
+large-text
@mixin 믹스인이름($매개변수: 기본값) {
스타일;
}
//$width는 1px, $color는 black으로 기본값을 설정한다.
@mixin dash-line($width: 1px, $color: black) {
border: $width dashed $color;
}
//border: 1px dashed black
.box1 { @include dash-line; }
//border: 4px dashed black
.box2 { @include dash-line(4px); }
참고)