Redux는 여러 컴포넌트에서 사용되는 상태 또는 전역상태 등을 효과적으로 관리할 수 있는 라이브러리이다.
3가지 유형의 state
const Form = () => {
const [inputName, setInputName] = useState('');
const changeHandler = (e) => {
setInputName(e.target.value);
}
return (
<input
type="text"
value={inputName}
onChange={(e) => changeHandler(e)}/>
)
}
<ModalBtn>
의 버튼글자가 Opened, Open Modal로 달라진다<ModalBackdrop>컴포넌트와 하위 컴포넌트들
이 렌더링되고, false인 경우 렌더링되지 않는다import {useState} from 'react';
import styled from "styled-components";
//이하생략
export const Modal = () => {
const [isOpen, setIsOpen] = useState(false);
const openModalHandler = () => {
setIsOpen(!isOpen);
}
return (
<>
<ModalContainer>
<ModaBtn onClick={openModalHandler}> {isOpen? "Opened!" : "Open Modal"}</ModalBtn>
{isOpen && (
<ModalBackdrop onClick={openModalHandler}>
<ModalView onClick={(e)=>e.stopPropagation()}>
<CloseModal onClick={openModalHandler}×</closeModal>
Hello World
</ModalView>
</ModalBackdrop>)}
</ModalContainer>
</>
)
}
Redux의 편리함
앞서 살펴본 상태의 유형들 중 local state는 하나의 컴포넌트에만 영향을 주기 때문에 useState를 사용하더라도 불편함이 없다. 하지만, 두번째, 세번째 유형의 상태는 하나의 상태가 여러 컴포넌트에 영향을 주기 때문에 상위 컴포넌트에서 하위 컴포넌트로 props를 내려주어야 하는데, 컴포넌트가 많을수록, 멀수록 props가 여러 컴포넌트를 거치게 된다. 이러한 현상을 props chain 또는 props drilling이라고 하는데, 하위 컴포넌트까지 데이터를 전달하기 위해 불필요하게 여러 컴포넌트에도 props를 전달해줘야 하는 것이다.
따라서, 이런 경우에는 상태관리 시스템인 Redux 라이브러리를 사용하면 여러 컴포넌트에서 상태에 접근, 사용할 수 있다.