Skip to content
This repository was archived by the owner on Dec 29, 2022. It is now read-only.

Commit 2e2f01a

Browse files
committed
updated example project
1 parent e00f97f commit 2e2f01a

6 files changed

Lines changed: 110 additions & 97 deletions

File tree

rex-example/src/App.tsx

Lines changed: 30 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,40 @@
1-
import React, { useState } from "react";
2-
import store from "./store/store";
3-
4-
const { useRex } = store;
1+
import React from "react";
2+
import { useFormFieldStore } from "./store/useFormField";
53

64
export default function App() {
7-
const store = useRex();
8-
const { todos } = store;
9-
10-
const [newTask, updateNewTask] = useState("");
11-
12-
const onAddTask = () => {
13-
todos.addTask(newTask);
14-
updateNewTask("");
15-
};
16-
5+
const {
6+
values,
7+
updateName,
8+
updateEmail,
9+
updateAge,
10+
updatePhone
11+
} = useFormFieldStore();
1712
return (
1813
<div>
1914
<input
2015
type="text"
21-
value={newTask}
22-
onChange={event => updateNewTask(event.target.value)}
23-
placeholder="New Task"
16+
value={values.name}
17+
onChange={e => updateName(e.target.value)}
18+
placeholder="Name"
19+
/>
20+
<input
21+
type="text"
22+
value={values.email}
23+
onChange={e => updateEmail(e.target.value)}
24+
placeholder="Email"
25+
/>
26+
<input
27+
type="text"
28+
value={values.phone || ""}
29+
onChange={e => updatePhone(e.target.value)}
30+
placeholder="Phone"
31+
/>
32+
<input
33+
type="number"
34+
value={values.age || ""}
35+
onChange={e => updateAge(parseInt(e.target.value))}
36+
placeholder="Age"
2437
/>
25-
<button onClick={onAddTask}>Submit</button>
26-
<ul>
27-
{todos.list.map((item, itemIndex) => {
28-
const onClickCheckbox = () => todos.toggleTask(itemIndex);
29-
return (
30-
<li key={itemIndex}>
31-
<input
32-
type="checkbox"
33-
onChange={onClickCheckbox}
34-
checked={item.status}
35-
/>
36-
{item.task}
37-
</li>
38-
);
39-
})}
40-
</ul>
4138
</div>
4239
);
4340
}

rex-example/src/SimpleApp.tsx

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import React from "react";
2+
import useRex from "rex-state";
3+
4+
const useInput = () => {
5+
const [state, setState] = useRex({ value: "" });
6+
7+
return {
8+
get value() {
9+
return state.value;
10+
},
11+
updateValue(value: string) {
12+
setState({ value });
13+
}
14+
};
15+
};
16+
17+
const SimpleApp = () => {
18+
const { value, updateValue } = useInput();
19+
20+
return (
21+
<input
22+
type="text"
23+
value={value}
24+
placeholder="Add Text here..."
25+
onChange={event => updateValue(event.target.value)}
26+
/>
27+
);
28+
};
29+
30+
export default SimpleApp;

rex-example/src/index.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
import React from "react";
22
import ReactDOM from "react-dom";
3-
import store from "./store/store";
43
import App from "./App";
4+
import { FormFieldProvider } from "./store/useFormField";
55

6-
const { RexProvider } = store;
6+
// import SimpleApp from "./SimpleApp";
7+
8+
// ReactDOM.render(<SimpleApp />, document.getElementById("app-root"));
79

810
ReactDOM.render(
9-
<RexProvider>
11+
<FormFieldProvider>
1012
<App />
11-
</RexProvider>,
13+
</FormFieldProvider>,
1214
document.getElementById("app-root")
1315
);

rex-example/src/store/Todos.ts

Lines changed: 0 additions & 52 deletions
This file was deleted.

rex-example/src/store/store.ts

Lines changed: 0 additions & 8 deletions
This file was deleted.
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import useRex, { createRexStore } from "rex-state";
2+
3+
type formFields = {
4+
name: string;
5+
email: string;
6+
gender?: "male" | "female";
7+
phone?: string;
8+
age?: number;
9+
};
10+
11+
const useFormField = () => {
12+
const defaultState: formFields = {
13+
name: "",
14+
email: ""
15+
};
16+
17+
const [state, setState] = useRex(defaultState);
18+
19+
return {
20+
get values() {
21+
return state;
22+
},
23+
updateName(name: formFields["name"]) {
24+
setState({ name });
25+
},
26+
updateEmail(email: formFields["email"]) {
27+
setState({ email });
28+
},
29+
updatePhone(phone: formFields["phone"]) {
30+
setState({ phone });
31+
},
32+
updateGender(gender: formFields["gender"]) {
33+
setState({ gender });
34+
},
35+
updateAge(age: formFields["age"]) {
36+
setState({ age });
37+
}
38+
};
39+
};
40+
41+
const { RexProvider, useStore } = createRexStore(useFormField);
42+
43+
export const FormFieldProvider = RexProvider;
44+
export const useFormFieldStore = useStore;

0 commit comments

Comments
 (0)