-
localStorage개발/react 2020. 12. 11. 18:00
리액트의 localStorage는 Android의 SharedPreference나 iOS의 UserDefaults 처럼 애플리케이션 단위로 key-value 값을 저장할 수 있는 라이브러리다. 아래 코드를 보면 getItem 함수에 key값을 넣어서 값을 받아오고 setItem 함수에 key 값을 넣어서 값을 업데이트한다.
아래 코드를 보면 JSON 라이브러리를 사용해 변환하는 과정이 있는데 이 이유는 localStorage에서는 string의 형태로만 저장이 가능하기 때문이다. 그래서 일반 텍스트를 사용하는 것이 아니면 모두 JSON을 이용해 값을 변환해서 저장해야한다. 배열 같은 값을 저장한다면 어차피 변환하는 과정이 필요하기 때문에 항상 써두는 것도 나쁘지 않을 것 같다.
class App extends React.Component { constructor(props) { super(props); this.handleIncrease = this.handleIncrease.bind(this) this.handleDecrease = this.handleDecrease.bind(this) this.state = { counter: 0 }; } componentDidMount() { const json = localStorage.getItem('counter'); const counter = JSON.parse(json); if (counter) { this.setState((prevState) => {return {counter: counter}}) } } componentDidUpdate(prevProps, prevState) { const json = JSON.stringify(this.state.counter); localStorage.setItem('counter', json) }
componentDidMount() 와 componentDidUpdate() 함수는 리액트의 라이프사이클 관리 함수다. componentDidMount()는 리액트 컴포넌트가 처음 생성 될 때 호출되고 componentDidUpdate는 리액트 컴포넌트에 변화가 생겼을 때, 예로 state 값이 변화해서 UI가 바뀌었을 때 호출된다. 위 코드는 각 라이프 사이클에서 필요한 작업을 넣은 것이다. 주로 componentDidMount에서 기존 값을 가져오고(fetch) componentDidUpdate에서 값을 업데이트 한다
소스코드
https://github.com/kwony/react-study/blob/main/src/playground/blog-localstorage.js