Skip to content

Instantly share code, notes, and snippets.

@kana-sama
Created October 16, 2019 14:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kana-sama/4300762626ebd7aa1ba86817acd5c6b9 to your computer and use it in GitHub Desktop.
Save kana-sama/4300762626ebd7aa1ba86817acd5c6b9 to your computer and use it in GitHub Desktop.
import * as React from "react";
import * as ReactDOM from "react-dom";
import { observable, action } from "mobx";
import { useLocalStore, useObserver } from "mobx-react-lite";
class CurrentUserModel {
@observable value = null;
@action fetch() {
setTimeout(() => {
this.value = {
name: `kana`,
age: new Date().getSeconds()
};
}, 500);
}
}
const currentUserModel = new CurrentUserModel();
function User({ name, age }) {
return (
<>
<div>Name: {name}</div>
<div>Age: {age}</div>
</>
);
}
function CurrentUser() {
React.useEffect(() => currentUserModel.fetch(), []);
return useObserver(() => {
if (currentUserModel.value == null) {
return "Loading...";
} else {
return (
<User
name={currentUserModel.value.name}
age={currentUserModel.value.age}
></User>
);
}
});
}
function App() {
const state = useLocalStore(() => ({
isOpen: false,
toggle() {
this.isOpen = !this.isOpen;
}
}));
return useObserver(() => (
<>
<button onClick={state.toggle}>toggle</button>
<div>{state.isOpen && <CurrentUser />}</div>
</>
));
}
ReactDOM.render(<App />, document.getElementById("root"));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment