[React MobX] MobX React integration
MobX React integration
While MobX works independently from React, they are most commonly used together. In The gist of MobX you have already seen the most important part of this integration: the observer
HoC that you can wrap around a React component.
Installation
1 | npm install -s mobx-react-lite |
Usage
1 | // src/main.js |
Hint: you can play with the above example yourself on CodeSandbox - https://codesandbox.io/s/minimal-observer-p9ti4?file=/src/index.tsx.
The observer
HoC automatically subscribes React components to any observables that are used during rendering. As a result, components will automatically re-render when relevant observables change. It also makes sure that components don’t re-render when there are no relevant changes. So, observables that are accessible by the component, but not actually read, won’t ever cause a re-render.
In practice this makes MobX applications very well optimized out of the box and they typically don’t need any additional code to prevent excessive rendering.
For observer
to work, it doesn’t matter how the observables arrive in the component, only that they are read. Reading observables deeply is fine, complex expression like todos[0].author.displayName
work out of the box. This makes the subscription mechanism much more precise and efficient compared to other frameworks in which data dependencies have to be declared explicitly or be pre-computed (e.g. selectors).
FAQs
Property ‘timer’ does not exist on type ‘{ children?: ReactNode; }’. TS2339
Declare { timer } : { timer: Timer }
type to fix that issue.
1 | Property 'timer' does not exist on type '{ children?: ReactNode; }'. TS2339 |
1 | // A function component wrapped with `observer` will react |
Can not find module
Export component to fix that issue.
1 | - ReactDOM.render(<TimerView timer={myTimer} />, document.body) |
References
[1] React integration · MobX - https://mobx.js.org/react-integration.html
[2] README · MobX - https://mobx.js.org/README.html
[3] mobxjs/mobx: Simple, scalable state management. - https://github.com/mobxjs/mobx
[4] React – A JavaScript library for building user interfaces - https://reactjs.org/
[5] State and Lifecycle – React - https://reactjs.org/docs/state-and-lifecycle.html
[6] Higher-Order Components – React - https://reactjs.org/docs/higher-order-components.html