react-router๋ฅผ ์‚ฌ์šฉํ• ์ผ์ด ์ƒ๊ฒจ์„œ ์‚ฝ์งˆ์„ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.
react router ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ๋ชจ๋“ˆ์ค‘์— ๊ฐ€์žฅ ์ธ๊ธฐ์žˆ๋Š”๊ฒŒ react-router ์ด๋‹ค.

๊ทธ๋Ÿฐ๋ฐ require๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ํ™˜๊ฒฝ์ด์–ด์„œ ๋ธŒ๋ผ์šฐ์ €๋กœ ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ–ˆ๋‹ค.
node.js ํ˜•์‹์˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•˜์—ฌ browserfly๋ฅผ ๋งŽ์ด ์“ฐ๋Š”๋ฐ ํ…Œ์ŠคํŠธํ•ด๋ณด๋‹ˆ ๋ผ์šฐํ„ฐ์— ๊ด€ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊นŒ์ง€ ๋ชฝ๋•… ํ•ฉ์ณ๋ฒ„๋ฆฌ๋‹ค๋ณด๋‹ˆ ๋นŒ๋“œํ• ๋•Œ 4,5์ดˆ๋‚˜ ๊ฑธ๋ฆฌ๋Š”๊ฑฐ์˜€๋‹ค.
๊ทธ๋ž˜์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ require๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , <script src=""> ํ˜•์‹์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ค๊ณ  ์“ธ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์ฐพ์•„๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค. ์•„๋ฌด๋ž˜๋„ require๋Š” ์ธ์—ฐ์ด ์—†๋Š”๋“ฏ.. ใ… ใ… 

react-router

https://www.npmjs.com/package/react-router

npm์˜ react-router ๋ชจ๋“ˆ ํŽ˜์ด์ง€์— ๊ฐ€๋ฉด ์ค‘๊ฐ„์— UMD ์„น์…˜์ด ์žˆ๋‹ค.
์—ฌ๊ธฐ์„œ CDN ์•ˆ๋‚ด์—์„œ ์†Œ์Šค๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๋งํฌ๊ฐ€ ์žˆ๋Š”๋ฐ ๊ทธ ๋งํฌ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์†Œ์Šค๋ฅผ ๋‹ค์šด๋ฐ›์•„์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

<script src="https://cdnjs.cloudflare.com/ajax/libs/react-router/1.0.0/ReactRouter.min.js"></script>

์†Œ์Šค์—์„œ ๋ณด๋ฉด ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๋Š”๊ฒƒ์ด๋ผ๊ณ  ๋‚˜์™€์žˆ๋‹ค. ์ด๊ฒƒ์œผ๋กœ Router ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ณง์žฅ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

// using an es6 transpiler, like babel 
import { Router, Route, Link } from 'react-router/umd/ReactRouter'
 
// using globals 
var Router = window.ReactRouter.Router;
var Link = window.ReactRouter.Link;
var Route = window.ReactRouter.Route;

gulpfile.js

jsx๋กœ ์ฝ”๋”ฉํ•œ๋‹ค๋ฉด babel๋กœ ๋นŒ๋“œ๋Š” ํ•ญ์ƒ ํ•ด์•ผํ•  ๊ฒƒ์ด๋‹ค. ๋Œ€๋žต์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํƒœ์Šคํฌ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.

var gulp = require('gulp');
var uglify = require('gulp-uglify');
var babel = require('gulp-babel');
var concat = require('gulp-concat');

// compile react
gulp.task('react', function(){
	return gulp.src([ 'src/**/!(index)*.jsx', 'src/**/index.jsx'])
		.pipe(babel({
			plugins : ['transform-react-jsx'],
			presets : ['es2015']
		}))
		.pipe(uglify())
		.pipe(concat('app.js', { newLine: '\n' }))
		.pipe(gulp.dest("dist"));
});

gulp.task('react:watch', function(){
	gulp.watch('src/**/*.jsx', ['react']);
});

concat์œผ๋กœ ์†Œ์Šค๋ฅผ ํ•ฉ์น ๋•Œ index.jsxํŒŒ์ผ์€ ์‹คํ–‰ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด์žˆ์–ด ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ๋“ค์–ด๊ฐ€์•ผํ•  ํ•„์š”๊ฐ€ ์žˆ์–ด์„œ gulp.src([ 'src/**/!(index)*.jsx', 'src/**/index.jsx'])ํ˜•์‹์œผ๋กœ ์ˆ˜์ •ํ–ˆ๋‹ค.
es2015 ํ˜•์‹์— ํฅ๋ฏธ๊ฐ€ ์ƒ๊ฒจ es2015 ํ˜•์‹์œผ๋กœ ์ฝ”๋”ฉํ•˜๋ฉด์„œ babel ํ”„๋ฆฌ์…‹์œผ๋กœ es2015๋ฅผ ๋„ฃ์—ˆ๋‹ค. ๊ทธ ์ „์— npm install --save-dev babel-preset-es2015 ๋ช…๋ น์œผ๋กœ ๋ชจ๋“ˆ์„ ์„ค์น˜ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

History

๋ฐ๋ชจ๋ฅผ ๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋‹ˆ ?_k=abc123 ๊ฐ’์ด ๊ณ„์† ๋ถ™์–ด๋Œ€๋Š”๊ฒƒ์ด๋‹ค.
์ฐพ์•„๋ณด๋‹ˆ ๋Œ€๋žต์ ์œผ๋กœ history์— ๊ด€ํ•œ ๋ถ€๋ถ„๋•Œ๋ฌธ์— ๋‹ฌ๋ฆฌ๋Š”๊ฑฐ ๊ฐ™์€๋ฐ ์—†์• ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์—ˆ์ง€๋งŒ require๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ๋Š” ์—ญ์‹œ ์• ๋ฅผ ๋จน๋Š”๋‹ค.
๋Œ€๋ถ€๋ถ„์˜ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์—์„œ๋Š” createBrowserHistory ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•ด๋ผ๊ณ  ํ•ด์„œ ์ฐพ์•„๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค.

import createBrowserHistory from 'history/lib/createBrowserHistory';
...

<Router history={createBrowserHistory()}>

์ด๊ฒƒ์€ require๋ฅผ ์“ฐ๋Š” ๋ฐฉ๋ฒ•์ด๋ผ์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๋ฐฉ์‹์ด๋‹ค.

https://www.npmjs.com/package/history
์ผ๋‹จ History ๋ชจ๋“ˆ ์‚ฌ์ดํŠธ์—์„œ ์ธ์Šคํ†จ ์„น์…˜์—์„œ umd ํ˜•์‹์˜ ์†Œ์Šค๋ฅผ cdn ์ฃผ์†Œ๊ฐ€ ์žˆ๋Š”๊ฑธ ๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค.

<script src="https://npmcdn.com/history/umd/History.min.js"></script>

Load library

js์—์„œ require๋กœ ๋ชจ๋“ˆ์„ ๋ถˆ๋Ÿฌ์˜ค์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— html์—์„œ <script src=""/>๋กœ ๋ชจ๋“ˆ์„ ๋ถˆ๋Ÿฌ์™€์•ผํ•œ๋‹ค.

<div id="app"></div>

<script src="react-0.14.3.js"></script>
<script src="react-dom-0.14.3.min.js"></script>
<script src="ReactRouter.min.js"></script>
<script src="History.min.js"></script>

<!-- build js file -->
<script src="dist/app.js"></script>

src/index.jsx

์žฌ๋ฃŒ๋Š” ์ค€๋น„๋˜์—ˆ์œผ๋‹ˆ ๋นŒ๋“œํ•  ์†Œ์Šค๋ฅผ ์ฝ”๋”ฉํ•œ๋‹ค.

const Router = window.ReactRouter.Router;
const Link = window.ReactRouter.Link;
const Route = window.ReactRouter.Route;
const IndexRoute = window.ReactRouter.IndexRoute;
const createHashHistory = window.History.createHashHistory;

// render router
ReactDOM.render(
	(
		<Router history={createHashHistory({ queryKey: false })}>
			<Route path="/" component={App}>
				<Route path="user" component={User}/>
			</Route>
		</Router>
	),
	document.getElementById('app')
);

๋ผ์šฐํ„ฐ์— ๋ชจ๋“ˆ์„ ์ปดํฌ๋„ŒํŠธ ์ƒ์ˆ˜๋กœ ํ• ๋‹นํ•œ ๋ถ€๋ถ„

const Router = window.ReactRouter.Router;
const Link = window.ReactRouter.Link;
const Route = window.ReactRouter.Route;
const IndexRoute = window.ReactRouter.IndexRoute;

History ๋ชจ๋“ˆ์„ ์ปดํฌ๋„ŒํŠธ ์ƒ์ˆ˜๋กœ ํ• ๋‹นํ•œ ๋ถ€๋ถ„

const createHashHistory = window.History.createHashHistory;

History ๋ชจ๋“ˆ์„ console๋กœ ๋’ค์ ธ๋ณด๋‹ˆ createBrowserHistory๋ฉ”์„œ๋“œ๊ฐ€ ์—†์—ˆ๋‹ค.
๊ทธ๋ž˜์„œ ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๋“ค์„ ํ•˜๋‚˜์”ฉ ํ…Œ์ŠคํŠธํ•ด๋ณด๋ฉด์„œ ์‚ฝ์งˆ์„ ํ•ด๋ณด๋‹ˆ createHashHistory ๋ฉ”์„œ๋“œ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. react-router๋Š” #ํ•ด์‰ฌ ๋ฌธ์ž๋กœ url ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ธฐ๋•Œ๋ฌธ์ธ๋“ฏ..

Render

๋ผ์šฐํ„ฐ ์ปดํฌ๋„ŒํŠธ ๋ Œ๋”๋ฅผ ํ•˜๊ธฐ์œ„ํ•œ ์ฝ”๋“œ

ReactDOM.render(
	(
		<Router history={createHashHistory({ queryKey: false })}>
			<Route path="/" component={App}>
				<Route path="user" component={User}/>
			</Route>
		</Router>
	),
	document.getElementById('app')
);

<Router history={createHashHistory({ queryKey: false })}> ๋ถ€๋ถ„์— _k ํŒŒ๋ผ๋ฉ”ํ„ฐ๋ฅผ ์—†์• ๊ธฐ ์œ„ํ•˜์—ฌ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋„ฃ์—ˆ๋‹ค.

url์ฃผ์†Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ด๋™ํ•˜๋„๋ก ์ฒ˜๋ฆฌํ–ˆ๋‹ค.

| URL | Component |
|------- |----------------- |
| / | <App/> |
| /user | <User/> |

App.jsx

/๋กœ ์ด๋™ํ• ๋•Œ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ปดํฌ๋„ŒํŠธ

const App = React.createClass({
	render() {
		return (
			<div>
				<h1>Hello App</h1>
				{this.props.children}
			</div>
		)
	}
});

์ฃผ์˜๊นŠ๊ฒŒ ๋ด์•ผํ•  ๋ถ€๋ถ„์€ {this.props.children}
this.props.children ๊ฐ’์€ ํ•˜์œ„ Route๋ฅผ ๊ฐ€๋ฅดํ‚จ๋‹ค. ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋‹ค๋ฅด๊ฒŒ ํ‘œ์‹œ๋ ํ…๋ฐ console๋กœ this.props๊ฐ’์„ ์ฒดํฌํ•ด๊ฐ€๋ฉด์„œ ๋„ฃ์œผ๋ฉด ๋ ๊ฒƒ์ด๋‹ค.

User.jsx

App ์ปดํฌ๋„ŒํŠธ์˜ ์ž์‹์œผ๋กœ ์ถœ๋ ฅ๋˜๋Š” ์ปดํฌ๋„ŒํŠธ

const User = React.createClass({
	render() {
		return (
			<div>
				<h1>Hello User</h1>
			</div>
		)
	}
});

ps.
์ „์ฒด์ ์ธ ์†Œ์Šค๋Š” ์—ฌ์œ ๊ฐ€ ์ƒ๊ธด๋‹ค๋ฉด ์ •๋ฆฌํ•ด๋ณด๊ฒ ์Œ. ใ… ใ… 

๋ฉ”ํƒ€๋ฐ์ดํ„ฐ

์กฐํšŒ์ˆ˜
906
์ข‹์•„์š”
0

0๊ฐœ์˜ ๋Œ“๊ธ€

๋“ฑ๋ก๋œ ๋Œ“๊ธ€์ด ์—†์Šต๋‹ˆ๋‹ค.