오늘은 리덕스(redux)에 관해 잠깐 배워보았다.
-javaScript 상태관리 라이브러리
• Node.js 모듈
• 상태관리 툴 종류
상태관리의 필요성
• 상태관리
리덕스
• Provider란?
위에 폼을 만들어 이름과 전화번호가 입력되면 오른쪽에 추가되어 보여지게 끔 해보기로 했다.
import './App.css';
import {Container, Row, Col} from 'react-bootstrap';
import ContactForm from './components/ContactForm';
import ContactList from './components/ContactList';
import 'bootstrap/dist/css/bootstrap.min.css';
function App() {
return (
<div className="App">
<h1 className="title">연락처</h1>
<Container>
<Row>
<Col>
<ContactForm></ContactForm>
</Col>
<Col>
<ContactList></ContactList>
</Col>
</Row>
</Container>
</div>
);
}
export default App;
해당되는 폼과 리스트에 관한 js파일을 따로 작성해 import로 연결해 주었다.
import React from "react";
import {Row, Col} from "react-bootstrap";
const ContactItem = ({item}) =>{
return(
<Row>
<Col lg={1}>
<img width={50} src="https://upload.wikimedia.org/wikipedia/commons/thumb/b/bc/Unknown_person.jpg/925px-Unknown_person.jpg"/>
</Col>
<Col lg={11}>
<div>{item.name}</div> //작성자 이름
<div>{item.phoneNumber}</div> //작성자 휴대전화 번호
</Col>
</Row>
);
}
export default ContactItem;
그런다음 관련 리덕스 파일을 만들어 준다.
import {createStore} from 'redux';
import reducer from "./reducer/reducer";
let store = createStore(reducer);
export default store;
입력받은 폼을 배열에 저장해 보여지게끔 해주는 파일이다.
let initialState = {
contactList: [],
};
function reducer(state = initialState, action){
const {type, payload} = action;
switch(type){
case 'ADD_CONTACT':
return{
...state,
contactList:[
...state.contactList,
{
name: action.payload.name,
phoneNumber: action.payload.phoneNumber,
},
],
};
default :
return {...state}; // ...은 state가 가지는 모든 속성을 가리킴
}
}
export default reducer;
import React from "react";
import ContactItem from "./ContactItem";
import SearchBox from "./SearchBox";
import { useSelector } from "react-redux";
const ContactList = () =>{
const contactList = useSelector((state) =>state.contactList);
return (
<div>
<SearchBox></SearchBox>
{contactList.map((item) => (
<ContactItem item={item}/>))}
</div>
);
}
export default ContactList;
리덕트를 왜 써주는 지는 이해하기 힘들어서 아래 사이트를 보니 이해가 갔다.
예를 들어 Todolist를 만들 경우 해당 입력받은 자료를 저장된 곳에서 불러올려면 부모 컴포넌트가 관리하니 거기서부터 불러오고 하면 되는 간결한 구조이지만, 프로젝트가 규모가 커지면 관리가 어려워지는데 그럴때 리덕트를 쓴다는 골자의 내용이였다.
자세한간 아래 페이지에 잘 설명되어 있으니 참조하면 좋을듯 하다.
꽤 복잡한 것을 만들어 보았다. 리덕트를 새로 배워보기도 했고..