Skip to content
This repository was archived by the owner on Oct 16, 2024. It is now read-only.

Commit a4d440f

Browse files
committed
added nanostores
1 parent 60de624 commit a4d440f

File tree

20 files changed

+196
-35
lines changed

20 files changed

+196
-35
lines changed

benchmark/benchmarks/react/1000fields/bench/agilets/collection.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import * as React from 'react';
2-
import * as ReactDom from 'react-dom';
1+
import React from 'react';
2+
import ReactDom from 'react-dom';
33
import { Agile, Logger } from '@agile-ts/core';
44
import { useAgile, useValue } from '@agile-ts/react';
55

benchmark/benchmarks/react/1000fields/bench/agilets/state.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import * as React from 'react';
2-
import * as ReactDom from 'react-dom';
1+
import React from 'react';
2+
import ReactDom from 'react-dom';
33
import { Agile, Logger } from '@agile-ts/core';
44
import { useProxy, useSelector } from '@agile-ts/react';
55

benchmark/benchmarks/react/1000fields/bench/hookstate.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import * as React from 'react';
2-
import * as ReactDom from 'react-dom';
1+
import React from 'react';
2+
import ReactDom from 'react-dom';
33
import { createState, useHookstate, State } from '@hookstate/core';
44

55
const fields = createState(

benchmark/benchmarks/react/1000fields/bench/jotai.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import * as React from 'react';
2-
import * as ReactDom from 'react-dom';
1+
import React from 'react';
2+
import ReactDom from 'react-dom';
33
import { atom, useAtom, Atom } from 'jotai';
44

55
const fields = Array.from(Array(1000).keys()).map((i) =>

benchmark/benchmarks/react/1000fields/bench/mobx.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import * as React from 'react';
2-
import * as ReactDom from 'react-dom';
1+
import React from 'react';
2+
import ReactDom from 'react-dom';
33
import { action, observable } from 'mobx';
44
import { observer } from 'mobx-react';
55

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import React from 'react';
2+
import ReactDom from 'react-dom';
3+
import { createStore, WritableStore } from 'nanostores';
4+
import { useStore } from 'nanostores/react';
5+
6+
const fieldsStore = createStore<WritableStore<string>[]>(() => {
7+
const fields = Array.from(Array(1000).keys()).map((i) => {
8+
const fieldStore = createStore<string>(() => {
9+
fieldsStore.set(`Field #${i + 1}` as any);
10+
});
11+
return fieldStore;
12+
});
13+
14+
fieldsStore.set(fields);
15+
});
16+
17+
let updatedFieldsCount = 0;
18+
19+
function Field({ field }: { field: WritableStore<string> }) {
20+
const name = useStore(field);
21+
22+
updatedFieldsCount++;
23+
24+
return (
25+
<div>
26+
Last {`<Field>`} render at: {new Date().toISOString()}
27+
&nbsp;
28+
<input
29+
value={name}
30+
onChange={(e) => {
31+
field.set(e.target.value);
32+
(document.getElementById(
33+
'updatedFieldsCount'
34+
) as any).innerText = updatedFieldsCount;
35+
}}
36+
/>
37+
</div>
38+
);
39+
}
40+
41+
function App() {
42+
const fields = useStore(fieldsStore);
43+
return (
44+
<div>
45+
<div>
46+
Last {`<App>`} render at: {new Date().toISOString()}
47+
</div>
48+
<br />
49+
{fields.map((field, index) => (
50+
<Field key={index} field={field} />
51+
))}
52+
<div id={'updatedFieldsCount'} />
53+
</div>
54+
);
55+
}
56+
57+
export default function (target: HTMLElement) {
58+
ReactDom.render(<App key={'nanostores'} />, target);
59+
}

benchmark/benchmarks/react/1000fields/bench/recoil.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import * as React from 'react';
2-
import * as ReactDom from 'react-dom';
1+
import React from 'react';
2+
import ReactDom from 'react-dom';
33
import { atom, RecoilRoot, RecoilState, useRecoilState } from 'recoil';
44

55
const fields = Array.from(Array(1000).keys()).map((i) =>

benchmark/benchmarks/react/1000fields/bench/redux.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import * as React from 'react';
2-
import * as ReactDom from 'react-dom';
1+
import React from 'react';
2+
import ReactDom from 'react-dom';
33
import { configureStore, createSlice } from '@reduxjs/toolkit';
44
import { Provider, useDispatch, useSelector } from 'react-redux';
55

benchmark/benchmarks/react/1000fields/bench/valtio.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import * as React from 'react';
2-
import * as ReactDom from 'react-dom';
1+
import React from 'react';
2+
import ReactDom from 'react-dom';
33
import { proxy, useSnapshot } from 'valtio';
44

55
const state = proxy({

benchmark/benchmarks/react/1000fields/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import agileNestedState from './bench/agilets/nestedState';
88
import hookstate from './bench/hookstate';
99
import jotai from './bench/jotai';
1010
import mobx from './bench/mobx';
11+
import nanostores from './bench/nanostores';
1112
import recoil from './bench/recoil';
1213
import redux from './bench/redux';
1314
import valtio from './bench/valtio';
@@ -65,6 +66,7 @@ suite
6566
.add('Hookstate', configTest(hookstate))
6667
.add('Jotai', configTest(jotai))
6768
.add('Mobx', configTest(mobx))
69+
.add('Nano Stores', configTest(nanostores))
6870
.add('Recoil', configTest(recoil))
6971
.add('Redux', configTest(redux))
7072
.add('Valtio', configTest(valtio))

0 commit comments

Comments
 (0)