-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathapp.tsx
More file actions
56 lines (48 loc) · 1.1 KB
/
Copy pathapp.tsx
File metadata and controls
56 lines (48 loc) · 1.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import React from 'react';
import { useSnapshot } from 'valtio';
import { useStore } from './store-provider';
function User() {
const { user } = useStore();
const state = useSnapshot(user);
return (
<div>
<input
aria-label="user-input"
type="text"
value={state.user?.name || ''}
onChange={(event) => {
const name = event.currentTarget.value;
user.setUser({ name });
}}
/>
{state.user?.name && <p data-testid="user-label">Hello, {state.user.name}!</p>}
</div>
);
}
function Counter() {
const { counter } = useStore();
const state = useSnapshot(counter);
const onInc = () => counter.inc();
return (
<div>
<p data-testid="count">{state.currentCountMessage}</p>
<button onClick={onInc}>increment</button>
</div>
);
}
function Resetter() {
const rootStore = useStore();
const onReset = () => {
rootStore.reset();
};
return <button onClick={onReset}>reset</button>;
}
export default function App() {
return (
<div>
<User />
<Counter />
<Resetter />
</div>
);
}