TIL no.33 - React Router, Scss
React Router
リアクションライブラリは別のページアプリケーションで、HTMLファイルは1つしかありません.
参照)スパって何?
既存の開発ではHTMLファイルの数はページの数と同じであるが,別のReactではどのように別のページを表示するのか.
このときに使用されるのがreact-Routerです.
異なるパス(アドレス)に応じて異なるビュー(画面)を表示
1)React Routerのインストールnpm install react-router-dom --save
--saveの原因はpackageです.確かにjsonに残るdependencies
!
2)Routes素子の実装import React from 'react';
import {
BrowserRouter as Router,
Switch,
Route,
} from 'react-router-dom';
import Login from './pages/Login/Login';
import Signup from './pages/Signup/Signup';
import Main from './pages/Main/Main';
class Routes extends React.Component {
render() {
return (
<Router>
<Switch>
<Route exact path="/" component={Login} />
<Route exact path="/signup" component={Signup} />
<Route exact path="/main" component={Main} />
</Switch>
</Router>
)
}
}
export default Routes;
3) index.js ReactDOM.render(<Routes />, document.getElementById('root'));
ルーティング機能を適用するには、ルーティングを設定済みの構成部品に変更する必要があります(<Routes/>
).
4)ルーティング
コース移動方法は2種類あります.
npm install react-router-dom --save
import React from 'react';
import {
BrowserRouter as Router,
Switch,
Route,
} from 'react-router-dom';
import Login from './pages/Login/Login';
import Signup from './pages/Signup/Signup';
import Main from './pages/Main/Main';
class Routes extends React.Component {
render() {
return (
<Router>
<Switch>
<Route exact path="/" component={Login} />
<Route exact path="/signup" component={Signup} />
<Route exact path="/main" component={Main} />
</Switch>
</Router>
)
}
}
export default Routes;
ReactDOM.render(<Routes />, document.getElementById('root'));
<Link>
使用部品import React from 'react';
import { Link } from 'react-router-dom';
class Login extends React.Component {
render() {
return (
<div>
<Link to="/Main"> 홈 </Link>
</div>
)
}
}
export default Login;
react-router-dom
で提供されている<Link>
素子はDOMから<a>
Compileに変換されている.<a>
ラベルと<Link>
ラベルはいずれも指定された経路に移動可能ですが<a>
ラベルはReactでは使用されませんか?いいえ.
<Link>
タグはSPA内のページ切り替えに用いられ、外部サイトに移動するには<a>
タグを用いる.withRouterHOC
道路実施import React from 'react';
import { withRouter } from 'react-router-dom';
class Login extends React.Component {
goToMain = () => {
this.props.history.push('/signup');
}
goToMain = () => {
if(response.message === "valid user"){
this.props.history.push('/main');
} else {
alert("회원이 아닙니다. 가입 먼저 해주세요")
this.props.history.push('/signup');
}
}
render() {
return (
<div>
<button
class="loginBtn"
onClick={this.goToMain}
>
로그인
</button>
</div>
)
}
}
export default withRouter(Login);
goToMain
中道具の客体の歴史移動に近づくことができます.
<Link>
とwithRouterHOC
の使用差<Link>
クリック時の即時移動を実施するためのロジックex)Navbarでメニューをクリックして対応するメニューページに移動
withRouterHOC
ページ切り替え時に処理するためのその他のロジックex)ログインボタン->BackAPIへのデータ送信/ユーザデータ検証、承認
Scss
SCSを使用する理由
Webはますます複雑になり、大量のCSSファイルが発生し、コードが重複し、メンテナンスが困難になる.これらの問題を解決するために,プログラミング概念(変数,関数など)のCSS前処理法を組み合わせた.
SCSS機能
1. Nesting
Sassの最も基本的な機能.Nesting
JSX最上位要素のclassNameを構成部品名と同じに設定します.scssファイルで
サブエレメントスタイルのプロパティは、最上位エレメントの内部で定義できます.
既存CSSnav ul {
margin: 0;
padding: 0;
list-style: none;
}
nav li {
display: inline-block;
}
nav a {
display: block;
padding: 6px 12px;
text-decoration: none;
}
Scss Nestingnav {
ul {
margin: 0;
padding: 0;
list-style: none;
li {
display: inline-block;
}
}
a {
display: block;
padding: 6px 12px;
text-decoration: none;
}
}
2.変数、&演算子、extendなどの機能を利用可能
どのページにもよく使われるtheme colorがあります.この場合は繰り返し使用されるので、$タグで変数を生成して使用できます.
extendは、属性と値が全く同じコードを複数の場所で記述するために使用されます.$theme-color: blue; // 색깔을 변수로 지정
%center {
display: flex;
justify-content: center;
align-items: center
}
mainContainer {
@extend center; // center 요소의 속성,값 동일 적용
button {
width: 200px;
height: 100px;
background-color: $theme-color;
&:hover {
background-color: red;
cursor: pointer;
}
}
input {
background-color: $theme-color;
&:focus {
background-color: red;
}
}
}
詳細については、本書を参照してください.
[正式ドキュメント]Sass Basic Guide
Reference
この問題について(TIL no.33 - React Router, Scss), 我々は、より多くの情報をここで見つけました
https://velog.io/@playck/TIL-no.33-React-Router-Sass
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
nav ul {
margin: 0;
padding: 0;
list-style: none;
}
nav li {
display: inline-block;
}
nav a {
display: block;
padding: 6px 12px;
text-decoration: none;
}
nav {
ul {
margin: 0;
padding: 0;
list-style: none;
li {
display: inline-block;
}
}
a {
display: block;
padding: 6px 12px;
text-decoration: none;
}
}
$theme-color: blue; // 색깔을 변수로 지정
%center {
display: flex;
justify-content: center;
align-items: center
}
mainContainer {
@extend center; // center 요소의 속성,값 동일 적용
button {
width: 200px;
height: 100px;
background-color: $theme-color;
&:hover {
background-color: red;
cursor: pointer;
}
}
input {
background-color: $theme-color;
&:focus {
background-color: red;
}
}
}
Reference
この問題について(TIL no.33 - React Router, Scss), 我々は、より多くの情報をここで見つけました https://velog.io/@playck/TIL-no.33-React-Router-Sassテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol