// AppStore.tsx
// [순서1] - store에 저장할 데이터를 객체에 설정해 줌
import { observable } from 'mobx'
// [질문]makeAutoObservable 로 하면 안되는지?
// [질문] useStore 훅을 사용하는 이유는?
// [질문] global variable , useContext 사용의 차이?
const AppStore = observable({
//Observable State : 를 만들면 MobX가 이제부터 내부의 객체를 " 관찰 " 할 수 있어 변화가 일어나면 바로 확인할 수 있다.
text: 'Initial text',
changeText(data) {
this.text = `changed ${data}`
},
})
export default AppStore
// [순서2] - 사용하는 곳1
import { useObserver } from 'mobx-react'
import SomeComponent from '../../pages/SomeComponent/SomeComponent'
import AppStore from '../AppStore/AppStore'
const store = AppStore
const Nav = () => {
return useObserver(() => (
<div className="App" style={{ border: '1px solid black' }}>
<div>
<i>1. AppComponent: AppStore의 초기값 :</i> {store.text}
</div>
<div>
<button
onClick={() => {
store.changeText('This is text from App')
}}
style={{ backgroundColor: 'yellowgreen' }}
>
2. AppComponent : Change 버튼
</button>
</div>
</div>
))
}
export default Nav
// [순서3] - 사용하는 곳 2(사용하는 곳1에서 바꾸면 여기도 바껴야 함)
import { useObserver } from 'mobx-react'
import AppStore from '../../components/AppStore/AppStore'
const store = AppStore
const SomeComponent = () => {
return useObserver(() => (
<div>
<div>
<i>3. otherComponent : store의 값이 사용되는 다른 컴포넌트:</i> {store.text}
</div>
<div>
{/* <button onClick={() => store.changeText('This is text from component')}>
Change text from component
</button> */}
</div>
</div>
))
}
export default SomeComponent
< useObserver은 옛날꺼여서 사용시 오류가 난다! >
=> 에러
=> 대체방법1
=> 대체방법2
< 내 코드 사용 예제 >
1. store로 사용할 파일을 만든다.
useStore 커스텀 훅에 넣고 <- 필요한 store만 빼 쓰기위해
store 사용 코드