blog-app
// npm 설치
npm i json-server
// json-server 가동
"scripts": {
"start": "json-server -p 3001 -w db.json",
},
// db.json 파일에 데이터 저장
{
"streams": [
{
"title": "My Stream",
"description": "This is a great stream.",
"id": 1
}
]
}
import React from "react";
import ReactDOM from "react-dom";
import App from "./components/App";
import { Provider } from "react-redux";
import { createStore,applyMiddleware, compose } from "redux";
import reduxThunk from "redux-thunk"
import reducers from "./reducers";
// chrome dev tools 설정
const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
// store 생성 및 redux 적용
const store = createStore(
reducers,
composeEnhancers(applyMiddleware(reduxThunk))
);
// Provider를 통해 App 컴포넌트와 스토어(상태저장소)를 연결
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>
, document.querySelector("#root")
);
크롬 데브툴즈 설정
const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
store생성 및 redux적용
const store = createStore(reducers, composeEnhancers(applyMiddleware(reduxThunk)));
Provider를 통해 App 컴포넌트와 스토어 연결
ReactDOM.render(<Provider store={store}><App /></Provider>, document.querySelector("#root"));
import React from "react";
import { Router, Route } from "react-router-dom";
import Header from "./Header";
import StreamList from "./streams/StreamList";
import StreamShow from "./streams/StreamShow";
import StreamDelete from "./streams/StreamDelete";
import StreamEdit from "./streams/StreamEdit";
import StreamCreate from "./streams/StreamCreate";
import history from "../history"
class App extends React.Component {
render() {
return (
<div className="ui container">
<Router history={history}>
<div>
<Header />
<Route path="/" exact component={StreamList} />
<Route path="/streams/new" exact component={StreamCreate} />
<Route path="/streams/edit/:id" exact component={StreamEdit} />
<Route path="/streams/delete/:id" exact component={StreamDelete} />
<Route path="/streams/show" exact component={StreamShow} />
</div>
</Router>
</div>
);
}
}
export default App;
라우터에 history 생성
<Router history={history}>
Header 컴포넌트 삽입
<Header />
Route 설정
<Route path="/" exact component={StreamList} />
<Route path="/streams/new" exact component={StreamCreate} />
<Route path="/streams/edit/:id" exact component={StreamEdit} />
<Route path="/streams/delete/:id" exact component={StreamDelete} />
import createHistory from "history/createBrowserHistory"
export default createHistory()
5.HEADER.js
import React from 'react';
import { Link } from 'react-router-dom';
import GoogleAuth from './GoogleAuth';
const Header = () => {
return (
<div className="ui secondary pointing menu">
<Link to="/" className="item">
Streamy
</Link>
<div className="right menu">
<Link to="/" className="item">
All Streams
</Link>
<GoogleAuth />
</div>
</div>
);
};
export default Header;
Blog App 2 GoogleAuth (0) | 2020.08.20 |
---|---|
react-router-dom (0) | 2020.08.20 |
Redux (0) | 2020.08.11 |
controlled component vs uncontrolled component (0) | 2020.08.10 |
class component vs functional component (0) | 2020.08.10 |