context 사용 시 에러가납니다.
강사님이 만드신 소스에서 그냥 간단하게 + - 되는 카운터 기능의 예제를 진행중입니다.
역시 hooks를 이용하려구 하구요.
// src/index.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import StoreProvider from './Context';
ReactDOM.render(
<StoreProvider>
<App />,
</StoreProvider>,
document.getElementById('root'),
);
-------------------------------------------------------------------------
// src/Context.js
import React, { createContext } from 'react';
import { counterStore } from './store/counterStore';
export const storeContext = createContext({ counterStore });
export const StoreProvider = ({ children }) => {
return <storeContext.Provider>{children}</storeContext.Provider>;
};
export default StoreProvider;
-------------------------------------------------------------------------
// src/App.js
import React from 'react';
import { useObserver } from 'mobx-react';
import useStore from './useStore';
// import { counterStore } from './store/counterStore';
function App() {
const { counterStore } = useStore();
return useObserver(() => (
<div>
<h1>{counterStore.number}</h1>
<button onClick={counterStore.increase}>+1</button>
<button onClick={counterStore.decrease}>-1</button>
</div>
));
}
export default App;
-------------------------------------------------------------------------
// src/store/counterStore.js
import { observable } from 'mobx';
const counterStore = observable({
number: 0,
increase() {
counterStore.number++;
},
decrease() {
counterStore.number--;
},
});
export { counterStore };
-------------------------------------------------------------------------
// src/useStore.js
import { useContext } from 'react';
import { storeContext } from './Context';
const useStore = () => {
const { counterStore } = useContext(storeContext);
return { counterStore };
};
export default useStore;
-------------------------------------------------------------------------
TypeError: Cannot destructure property 'counterStore' of 'Object(...)(...)' as it is undefined.
실행시 위와 같이 디스트럭처링을 할 수 없다고 나옵니다.
그래서 위의 src/useStore.js 부분에서 디스트럭처링 하지 않고 그냥 하게되면
// src/useStore.js
import { useContext } from 'react';
import { storeContext } from './Context';
const useStore = () => {
const counterStore = useContext(storeContext);
return { counterStore };
};
export default useStore;
TypeError: Cannot read property 'number' of undefined
Context API를 사용하지 않을 경우 스무스하게 잘 되는데 Context만 이용하려 하니 게속 에러가 발생합니다..
×
답변 4
1
import { useLocalStore } from 'mobx-react';
import React from 'react';
import counterStore from './counterStore';
export const storeContext = React.createContext(null);
export const StoreProvider = ({ children }) => {
const store = useLocalStore(counterStore);
return (
<storeContext.Provider value={store}>
{children}
</storeContext.Provider>
);
};
export default StoreProvider;
Provider에 store을 안 넣으셨네요.
import * as React from 'react';
import { storeContext } from './Context';
function useStore() {
const store = React.useContext(storeContext);
if (!store) {
// this is especially useful in TypeScript so you don't need to be checking for null all the time
throw new Error('useStore must be used within a StoreProvider.');
}
return store;
}
export default useStore;
1
useStore에서 useContext쓰실 필요없이 그냥 import하셔서 return { counterStore }만 하셔도 됩니다.
https://github.com/ZeroCho/redux-vs-mobx/blob/master/8.mobx-react/useStore.js
0
말씀하신대로 하는 경우는 Context.js 도 필요없고 App.js에서 Provider가 전혀 안쓰이는것과 다름이 없는것 아닌가요? Context 자체를 안쓰고 커스텀훅만 사용할 경우 잘 되는 것 같습니다... 그런데 저는 Context를 한번 사용해보고 싶어서요.
context api, redux를 혼용하는건 별로일까요?
0
368
1
섹션 3 mobx autorun 관련 질문입니다.
0
255
1
thunk 미들웨어 잡업 중 논리로직 단계? 질문이 있습니다.
0
285
1
rootSaga에서 call를 사용하는 이유가 궁금합니다.
0
358
1
observable의 함수를 익명함수로 바꿔봤습니다.
0
383
1
useSelector 리랜더링 질문있습니다.
0
382
1
비동기 action 타입을 뭘로 지정해야 할까요?
0
258
1
redux-thunk질문
0
432
1
state 변경 시 질문
0
346
1
state변경 시 질문
0
329
2
firstMiddleware와 thunkMiddleware 순서 질문
0
433
1
객체 동적 다이나믹 속성?? 질문
1
272
1
미들웨어 질문
0
247
1
리덕스 사가 실습 파일 확인 부탁드립니다!
1
581
2
1-6 강의에서 질문 있습니다!
1
359
1
redux-saga 깃헙 파일
0
369
1
createStore -> configureStore
0
300
1
전역 변수와 전역 상태 값
0
666
2
Redux toolkit 과 axios API 호출에 관한 질문입니다.
0
439
1
MobX Data
0
233
1
mobx state action 변화 감지 관련
0
717
1
mobx configure
0
208
1
리덕스 툴킷 과 saga질문
0
287
1
로깅 미들웨어 질문입니다
0
238
1





