|
1 |
| -import "./index.css"; |
2 | 1 | import React from "react";
|
3 | 2 | import ReactDOM from "react-dom";
|
4 |
| -import { |
5 |
| - DataBrowserRouter, |
6 |
| - Route, |
7 |
| - useLoaderData, |
8 |
| - Form, |
9 |
| - useNavigation, |
10 |
| -} from "react-router-dom"; |
11 |
| - |
12 |
| -function sleep(ms: number) { |
13 |
| - return new Promise((res) => setTimeout(res, ms)); |
14 |
| -} |
15 |
| - |
16 |
| -async function getTasks() { |
17 |
| - await sleep(Math.random() * 500); |
18 |
| - let json = localStorage.getItem("tasks"); |
19 |
| - return json ? JSON.parse(json) : []; |
20 |
| -} |
21 |
| - |
22 |
| -async function setTasks(tasks: string[]) { |
23 |
| - localStorage.setItem("tasks", JSON.stringify(tasks)); |
24 |
| -} |
| 3 | +import { BrowserRouter } from "react-router-dom"; |
25 | 4 |
|
26 |
| -async function addTask(task: string) { |
27 |
| - await sleep(Math.random() * 500); |
28 |
| - let tasks = (await getTasks()) as unknown as string[]; |
29 |
| - tasks.push(task); |
30 |
| - await setTasks(tasks); |
31 |
| - return task; |
32 |
| -} |
| 5 | +import "./index.css"; |
| 6 | +import App from "./App"; |
33 | 7 |
|
34 | 8 | ReactDOM.render(
|
35 | 9 | <React.StrictMode>
|
36 |
| - <DataBrowserRouter fallbackElement={<div>Loading...</div>}> |
37 |
| - <Route |
38 |
| - path="/" |
39 |
| - loader={async () => getTasks()} |
40 |
| - action={async ({ request }) => { |
41 |
| - let formData = await request.formData(); |
42 |
| - let text = formData.get("text") as string; |
43 |
| - return addTask(text); |
44 |
| - }} |
45 |
| - element={<Tasks />} |
46 |
| - /> |
47 |
| - </DataBrowserRouter> |
| 10 | + <BrowserRouter> |
| 11 | + <App /> |
| 12 | + </BrowserRouter> |
48 | 13 | </React.StrictMode>,
|
49 | 14 | document.getElementById("root")
|
50 | 15 | );
|
51 |
| - |
52 |
| -function Tasks() { |
53 |
| - let data = useLoaderData(); |
54 |
| - let ref = React.useRef<HTMLInputElement>(null); |
55 |
| - let navigation = useNavigation(); |
56 |
| - let busy = |
57 |
| - navigation.state === "submitting" || navigation.state === "loading"; |
58 |
| - |
59 |
| - React.useEffect(() => { |
60 |
| - if (!busy) { |
61 |
| - ref.current?.select(); |
62 |
| - } |
63 |
| - }, [busy]); |
64 |
| - |
65 |
| - return ( |
66 |
| - <div> |
67 |
| - {data.map((task: string, i: number) => ( |
68 |
| - <div key={i}>{task}</div> |
69 |
| - ))} |
70 |
| - <Form method="post"> |
71 |
| - <fieldset disabled={busy}> |
72 |
| - <input ref={ref} name="text" placeholder="New Task" />{" "} |
73 |
| - <button type="submit">{busy ? "Adding..." : "Add"}</button> |
74 |
| - </fieldset> |
75 |
| - </Form> |
76 |
| - </div> |
77 |
| - ); |
78 |
| -} |
0 commit comments