Skip to content

Example

ToDoList example

tsx
import { 
createStore
,
ref
,
computed
} from 'reactivity-store';
const
useTodo
=
createStore
(() => {
const
data
=
ref
<{
id
: number,
text
: string,
done
: boolean,
edit
: boolean }[]>([]);
const
mode
=
ref
<'all' | 'done' | 'active'>('all')
const
isAllComplete
=
computed
(() =>
data
.
value
.
length
> 0 &&
data
.
value
.
every
(
todo
=>
todo
.
done
));
const
currentShow
=
computed
(() =>
mode
.
value
=== 'all' ?
data
.
value
:
data
.
value
.
filter
(
todo
=>
mode
.
value
=== 'done' ?
todo
.
done
: !
todo
.
done
));
const
notDoneLength
=
computed
(() =>
data
.
value
.
filter
(
todo
=> !
todo
.
done
).
length
);
const
hasSomeItemDone
=
computed
(() =>
data
.
value
.
some
(
todo
=>
todo
.
done
));
const
addTodo
= (
text
: string) => {
data
.
value
=
data
.
value
.
concat
({
id
:
data
.
value
.
length
+
Math
.
random
(),
text
,
done
: false,
edit
: false });
} const
removeTodo
= (
id
: number) => {
data
.
value
=
data
.
value
.
filter
((
todo
) =>
todo
.
id
!==
id
);
} const
editTodo
= (
id
: number,
content
: string) => {
data
.
value
=
data
.
value
.
map
((
todo
) => {
if (
todo
.
id
===
id
) {
todo
.
text
=
content
;
} return
todo
;
}); } const
enableEdit
= (
id
: number) => {
data
.
value
=
data
.
value
.
map
((
todo
) => {
if (
todo
.
id
===
id
) {
todo
.
edit
= true;
} else {
todo
.
edit
= false;
} return
todo
;
}); } const
disableEdit
= () => {
data
.
value
=
data
.
value
.
map
((
todo
) => {
todo
.
edit
= false;
return
todo
;
}); } const
toggleTodo
= (
id
: number) => {
data
.
value
=
data
.
value
.
map
((
todo
) => {
if (
todo
.
id
===
id
) {
todo
.
done
= !
todo
.
done
;
} return
todo
;
}); } const
toggleAllDone
= () => {
const
isAllDone
=
isAllComplete
.
value
;
data
.
value
=
data
.
value
.
map
((
todo
) => {
todo
.
done
= !
isAllDone
;
return
todo
;
}); } const
clearDone
= () => {
data
.
value
=
data
.
value
.
filter
(
todo
=> !
todo
.
done
);
} const
changeMode
= (
m
: 'all' | 'active' | 'done') => {
mode
.
value
=
m
;
} return {
addTodo
,
data
,
removeTodo
,
editTodo
,
enableEdit
,
disableEdit
,
toggleTodo
,
isAllComplete
,
toggleAllDone
,
currentShow
,
mode
,
notDoneLength
,
hasSomeItemDone
,
clearDone
,
changeMode
};
})

Example