간단하고 확장 가능한 상태 관리,
쉽고 확장성 있게 만들어주는 검증된 라이브러리

'이벤트'가 발생하면 '액션' --업데이트 해서-->
'관찰 가능한 State' --알린 다음에 notify-->
Computed Value( 어떠한 state 값 바꼈을 때 state에 의존하는 애들 )
-- 트리거( 어떤 일이 일어나면 자동으로 작동하는 신호 ) 발생 -->
Side-effects( 타이핑 칠 때마다 값이 바뀜으로 인해 리렌더링 되는 것 )
ex ) Recoil 에서 타이핑할 때 ㅇㄴㄹㄴㅇㄹㄴ ---> 7 ( text.length )
여기서 ㅇㄴㄹㄴㅇㄹㄴ 이게 Observable State고,
7 이게 Computed Values( text가 바뀜으로 인해 새롭게 계산이 되는 value )임

📁바탕화면에 mobx-app 폴더 만들기
📥리액트 설치하기 : npx create-react-app ./
📥Mobx 설치하기 : npm install mobx
🙂리액트 실행하기 : npm run start
Observable( 관찰가능한 ) state
예시로 first가 Observable( 관찰 가능한 state )한 state니까
이것처럼 얘도 Observable한 state로 count = 0 이렇게 해줄 것⭕
constructor( )가 하는 일➡첨에 얘를 이용해서 객체를 만들 때



먼저 this를 해주고 이 this는 CounterStore 클래스를 가리킴✔
count는 observable state 라고 말해주는거임
🆙increase( ) 메소드 호출하면 count를 +1씩 증가시켜야함
🌫🐱🏍얘는 action임
그래서 increase는 action 이라고 정의해줌
+1씩 올리는 것도 있으니까 -1씩 내리는 것도 있어야함
decrease도 action 이라고 정의해줌
카운트가 양수일 땐 마이너스?: No가 나오고, 음수일 땐 Yes가 나옴
이 observable한 state가 변경됨에 따라
클래스( this ) 안에 있는 count가
isNegative➡observable state가 바뀌는 거에 따라서 다른 값을 리턴하고 있음
isNegative는 computed 라고 정의하면 됨
npm install mobx-react 설치하고 다시 실행 npm run start 하기


🛒myCounter={store} 하고 store 내려주기
App.js로 넘어와서 이런 UI를 먼저 만들어주자

그러면 이미 index.js 에서 store를 내려줬었음

이렇게 나오는 걸 확인할 수 있음


+ 버튼은 increase 이부분인데
이게 왜 '포로토타입' 안에 들어가있는걸까❓
생성자 함수 이용했을 땐 포로토타입 안이 아닌 이쪽에 들어가고
🖱 ➕/➖ 버튼 클릭해도 아무런 반응 없음 😕
🐍App 컴포넌트를 observer로 감싸기
🔄이 컴포넌트를 다시 렌더링 하는 것💻
지금 observable한 state가 count 🙆♀️
이것들을 이용해서 count를 바꿔주고 있으니까
🧐그래서 이런식으로 App 컴포넌트를 관찰( observer )하고 있는거임✔