-
[React] 서머코딩 3주차 Context/Hook/mock-server기타/FE 2020. 7. 20. 14:21반응형
src/App.js
//App.js import React, {useState} from 'react'; import './App.css'; import {ThemedButton, ThemedContextButton,Counter,Feed} from "./component"; import {ThemeContext,FontContext} from "./context"; function App() { const [themeValue, setThemeValue] = useState("dark"); const [isCounter, setIsCounter] = useState(true); return ( <div className="App"> <ThemeContext.Provider value={themeValue}> <FontContext.Provider value="nanum"> <ThemedButton theme= {themeValue}></ThemedButton> <ThemedContextButton></ThemedContextButton> {isCounter===true?<Counter/>:null} </FontContext.Provider> </ThemeContext.Provider> <br/> <button onClick={()=>setThemeValue("day")}>daychange</button> <button onClick={()=>setThemeValue("dark")}>change</button> <br/> <button onClick={()=>setIsCounter(false)}>remove counter</button> <Feed/> </div> ); } export default App;
src/context/
//ThemeContext import React from 'react'; const ThemeContext = React.createContext("day"); // day, night 중에 day가 기본 export default ThemeContext;
//FontContext import React from 'react'; const FontContext = React.createContext("helevetica"); export default FontContext;
src/component
//ThemedButton import React, { Component } from 'react'; import ThemeContext from "../context/ThemeContext"; class ThemedButton extends Component { static contextType = ThemeContext; render() { return ( <button>{this.props.theme}</button> ); } } export default ThemedButton;
//ThemedContextButton import React, { Component } from 'react'; import ThemeContext from "../context/ThemeContext"; import FontContext from "../context/FontContext"; class ThemedContextButton extends Component { // static contextType = ThemeContext; render() { return ( <> <ThemeContext.Consumer> { theme => ( <FontContext.Consumer> { font=> ( <button>{theme} {font}</button> ) } </FontContext.Consumer> ) } </ThemeContext.Consumer> <FontContext.Consumer> { font =>( <button>{font}</button> ) } </FontContext.Consumer> </> ); } } export default ThemedContextButton;
* Hook
src/component/
//Counter import React, { useState, useEffect } from 'react'; function Counter(props) { const [count, setCount] = useState(0); // componentDidmount~willUnmount 사이 범위 useEffect( ()=>{ console.log("hi") return () => { console.log("bye"); // clean-up } },[]); // 렌더링될때마다 useEffect( ()=>{ console.log("render"); }); // 특정 state가 바뀔때마다 useEffect( ()=>{ console.log("count change"); },[count]); return ( <div> count = {count} <button onClick={()=>setCount(count+1)}>count up</button> </div> ); } export default Counter;
//Feed import React, { useEffect } from 'react'; import dAPI from '../dstagramAPIs/DstagramAPIs'; function Feed(props) { useEffect( ()=>{ dAPI.get("/result") .then(res=>{ console.log(res.data); console.log(res); }) },[]); return ( <div> </div> ); } export default Feed;
src/dstagramAPIs
import axios from "axios" const Api = axios.create({ baseURL: "http://localhost:8080/", }) export default Api
yarn add json-server
mock/feed.json (src 바깥 폴더)
package.json
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject",
"mock-server": "json-server --watch --port 8080 mock/mock.json"
},
'기타 > FE' 카테고리의 다른 글
[React] 리액트 프로젝트 사용 기술 정리 (0) 2020.06.09