React

 

 

 

 

따라하며 배우는 리액트 A-Z

 


[프론트엔드, 웹 개발] 강의입니다.

이 강의를 통해 리액트 기초부터 중급까지 배우게 됩니다. 하나의 강의로 개념도 익히고 실습도 하며, 리액트를 위해 필요한 대부분의 지식을 한번에 습득할 수 있도록 만들었습니다.

✍️
이런 걸
배워요!

리액트

NextJS

타입스크립트

정적 사이트 자동 배포

도커

 

강의:  https://www.inflearn.com/course/%EB%94%B0%EB%9D%BC%ED%95%98%EB%8A%94-%EB%A6%AC%EC%95%A1%ED%8A%B8#

 

강의 자료 :  https://github.com/braverokmc79/DiagramPDF

 

소스 : 

https://github.com/braverokmc79/react-count-app

 

 

 

 

[10]. 리덕스

 

 

97. 리덕스 미들웨어

 

강의:

https://www.inflearn.com/course/따라하는-리액트/unit/119948?tab=curriculum

 

 

 

 

const loggerMiddleware =(store : any) =>(next:any) =>(action:any)=>{
    console.log("store" , store);
    console.log("action", action);
    next(action);
}
const middleware =applyMiddleware(loggerMiddleware);
const store =createStore(rootReducers , middleware);

 

=>

index.tsx

import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import {applyMiddleware, legacy_createStore as createStore } from 'redux';
import rootReducers from './reducers';
import { Provider } from 'react-redux';

const root = ReactDOM.createRoot(
  document.getElementById('root') as HTMLElement
);

const loggerMiddleware =(store : any) =>(next:any) =>(action:any)=>{
    console.log("store" , store);
    console.log("action", action);
    next(action);
}
const middleware =applyMiddleware(loggerMiddleware);
const store =createStore(rootReducers , middleware);


const render = ()=>root.render(
  <React.StrictMode>
  <Provider  store={store}>
        <App  
            onIncrement={()=> store.dispatch({type:"INCREMENT"})}
            onDecrement={()=> store.dispatch({type:"DECREMENT"})}
        />
    </Provider>
  </React.StrictMode>
);

render();

store.subscribe(render);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

98. Redux Thunk

 

강의:

https://www.inflearn.com/course/따라하는-리액트/unit/119949?tab=curriculum

 

 

 

 

설치 :

npm i axios 


npm  i redux-thunk

 

src/reducers/posts.tsx

export enum ActionType{
    FETCH_POSTS = "FETCH_POSTS",
    DELETE_TODOS ="DELETE_TODOS"
}

export interface Post{
    userId :number;
    id:number;
    title:string;
}


interface Action {
    type:ActionType;
    payload:Post[];
}

const posts = (state = [] , action :Action) => {
    switch(action.type){
        case 'FETCH_POSTS':
      
            return [...state, action.payload] ;
        default :
            return state
    }
    
}

export default posts

 

 

 

src/reducers/actions.tsx

import axios from 'axios';

export const fetchPosts=() :any=>{
    return async function fetchPostsThunk(dispatch :any, getState :any){
        const response =await axios.get("https://jsonplaceholder.typicode.com/posts");
       // console.log(" response.data  :  " , response.data)
        dispatch({type: "FETCH_POSTS", payload :response.data});
    }
}


export const getPosts= ():any => async (dispatch :any, getState :any) =>{
    const response =await axios.get("https://jsonplaceholder.typicode.com/posts");
    dispatch({type: "FETCH_POSTS", payload :response.data});
}

 

 

App.tsx

~

import { Post } from './reducers/posts';
import { fetchPosts, getPosts } from './actions/posts';
~



function App({ onIncrement, onDecrement } :Props) {

~
  
  const posts :Post[] =useSelector((state :RootState)=>state.posts[0]);


~



  
    useEffect(()=>{
        dispatch(getPosts());
    }, [dispatch ]);

  ~

 

  return (
    <div className="App">
         Clicked : {counter} times 

        <button onClick={onIncrement}>
          +
        </button>

        <button onClick={onDecrement}>
          -
        </button>
       <ul>
          {todos.map((todo, index)=><li key={index}>{todo}</li>)}
       </ul>
      <form onSubmit={addTodo}>
          <input type='text' value={todoValue} onChange={handleChange} />
          <input type="submit" />
      </form>

          <ul>
            {posts && posts.map((post,index)=><li key={index}>{post.title}</li> ) }
          </ul>
    </div>
  );
}

export default App;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

99. Redux Toolkit

 

강의 :

https://www.inflearn.com/course/따라하는-리액트/unit/120665?tab=curriculum

 

 

 

 

 

 

 

 

 

디렉토리 생성

react-redux-toolkit

 

설치

npx create-react-app  ./ --template redux-typescript

 

설치

npm i @reduxjs/toolkit react-redux

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

about author

PHRASE

Level 60  라이트

짚신도 제 날이 좋다 , 자기와 같은 정도의 사람끼리 짝을 맺음이 좋다는 말.

댓글 ( 4)

댓글 남기기

작성