| redux-thunk redux-thunk는 리덕스에서 비동기 작업을 처리 할 때 가장 많이 사용하는 미들웨어입니다. 이 미들웨어를 사용하면 액션 객체가 아닌 함수를 디스패치 할 수 있습니다. 함수를 디스패치 할 때에는, 해당 함수에서 dispatch 와 getState 를 파라미터로 받아와야 합니다. 이런 함수를 만들어주는 함수를 thunk 라고 부릅니다. thunk 사용 예 const getComments = () => (dispatch, getState) =>{ //여기서는 action을 disaptch 할 수 있습니다. //또한 getState 를 이용하여 현재 상태로 조회가 가능합니다. const id = getState().post.activeId; //요청이 시작했으을 알리는 액션 dis..
| 리덕스 미들웨어 리덕스 미들웨어는 action을 dispatch 했을 때 reducer 에서 처리하기에 앞서 사전에 지정된 추가적인 작업을 실행할 수 있게 해줍니다. 즉, 중간역할 을 담당한다고 생각하시면 됩니다! 일반적으로 리덕스 미들웨어는 라이브러리를 설치하여 사용하며, 주로 비동기 작업을 처리 할 때 사용됩니다. 라이브러리의 종류로는 redux-thunk redux-saga redux-observable redux-promise-middleware 등이 있습니다. 이 중 자주 사용되는것은 redux-thunk 와 redux-saga 입니다. 흐름 액션 -> 미들웨어 -> 리듀서 -> 스토어 추가적은 작업의 종류 특정 조건에 따라 action 을 무시하게 만들 수 있습니다. 액션을 콘솔에 출력 O..
| Route 사용자가 요청하는 주소에 따라 다른 컴포넌트를 보여줘야할 때 Route 라는 컴포넌트를 사용합니다. 사용 위와 같은 방법으로 사용합니다. 하지만, import logo from './logo.svg'; import './App.css'; import { Route } from 'react-router-dom'; import Home from './Home'; import About from './About'; function App() { return ( ) } export default App; 위와 같은 코드를 작성하면 / 경로에서는 About 컴포넌트를 잘 보여주지만, /asd 경로로 들어가면 About 컴포넌트와 함께 보여집니다. 이유는, /asd 경로가 / 규칙과도 일치하기 때문에..
polished의 스타일 관련 유틸 함수 사용하기 Sass를 사용 할 때에는 lighten() OR darken() 과 같은 유팅 함수를 사용하여 색상에 변화를 줄 수 있었습니다. CSS in JS 에서도 비슷한 유팅 함수를 사용하고 싶다면 polished 라는 라이브러리를 사용하면 됩니다. polished 사용 $ yarn add polished ThemeProvider 사용 styled-components 로 만드는 모든 컴포넌트에서 조회하여 사용 할 수 있는 전역적인 값을 설정해보겠습니다. const AppBlock = styled.div` width : 512px; margin : 0 auto; margin-top : 4rem; border : 1px solid black; padding : 1r..
| 클래스형 컴포넌트 클래스형 컴포넌트는 함수형 컴포넌트보다 사용이 덜 합니다. 하지만 프로젝트의 유지보수를 위해 알아봅시다 ! 함수형Hello.js import React form 'react; function Hello ( { color, name, isCheck } ){ return ( { dispathc({ type : "start' }). }; 하지만 클래스형 컴포넌트에서는 render 함수 내부터에서 선언은 할 수 있기는 하지만, 일반적으로 그렇게 하지 않고 클래스 안에 커스텀 메서드를 선언합니다. class Example extends Component { Count(){ console.log("내부선언 메서드"); } } render(){ return ( 카운트 실행 } } export d..
| Immer 란 ? 리액트에서 배열이나 객체를 업데이트 해야 할 때 직접 수정은 절대 하면 안되며, 불변성을 지켜주어야 합니다. 직접 수정하는 경우 const a = { a: 1, b: 2 }; a.a = 4; 이런 방법을 다음과 같이 업데이트 해야합니다. const a = { a: 1, b: 2 }; const change = { ...a, b:3 }; 배열도 마찬가지로 push,splice등 함수를 사용하거나 n 번째 항목을 직접 수정하면 안되며 concat, filter, map 함수를 이용하여 생성해야합니다. spread연산자( = ... 연산자) 는 구조가 deep할수록 코드가 조금 복잡해집니다. 따라서, immer라는 라이브러리를 사용하여 구현하면 보다 쉽게 가독성이 높은 코드로 구현할 수 ..
| Context API 란 ? ContextAPI는** "징검다리"** 같은 역할을 해줍니다. 특정 함수를 특정 컴포넌트를 거쳐 원하는 컴포넌트에게 전달하는 작업은 리액트로 개발하다보면 자주 발생하는데요, Componet 1개 정도는 큰 불편함이 없지만, 여러개의 컴포넌트를 거쳐 전달하게 된다면 어떻게 될까요? 이럴경우에 Context API를 사용하여 전달하면 매우 편리하게 전역으로 전달할 수 있습니다. | Context API 사용 React.createContext(null); Context를 생성할때는 다음과 같이 React.createContext() 를 사용하여 만듭니다. 파라미터값으로는 Context의 기본값이 되며, Context의 value값을 찾을 수 없을 때 기본값이 사용됩니다. 기..
| useReducer 이해하기 상태를 업데이트 할 때에는 useState 를 사용해서 새로운 상태를 설정해주었습니다. 하지만 이 방법 말고도 더 다른 유용한 방법이 존재하는데 바로 useReducer 를 이용하여 상태를 관리하는것입니다. 이 Hook 함수를 사용하면 컴포넌트의 상태 업데이트 로직을 컴포넌트에서 분리할 수 있습니다. 상태 업데이트 로직을 컴포넌트 바깥에 작성 할 수 있고, 다른 파일에 작성 후 불러와서 사용할 수 있습니다. reducer 는 현재 상태와 액션객체를 파라미터로 받아아서 새로운 상태를 반환해주는 함수입니다. function reducer(state,action){ //새로운 상태를 만드는 로직 return nextState; } reducer에서 반환하는 상태는 곧 컴포넌트가..