Adding Solid to with-nanostores example (#2079)

This commit is contained in:
Agustin Mulet 2021-12-13 15:37:06 -03:00 committed by GitHub
parent ff9f4ec230
commit 23b7756d6b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 69 additions and 28 deletions

View file

@ -10,9 +10,10 @@
}, },
"dependencies": { "dependencies": {
"@nanostores/preact": "^0.1.2", "@nanostores/preact": "^0.1.2",
"@nanostores/react": "^0.1.2", "@nanostores/react": "^0.1.5",
"@nanostores/vue": "^0.4.1", "@nanostores/vue": "^0.4.1",
"nanostores": "^0.5.6" "nanostores": "^0.5.7",
"solid-nanostores": "0.0.6"
}, },
"devDependencies": { "devDependencies": {
"@astrojs/renderer-solid": "^0.2.1", "@astrojs/renderer-solid": "^0.2.1",

View file

@ -12,16 +12,17 @@ const AdminsPreact = () => {
<> <>
<h1>Preact</h1> <h1>Preact</h1>
<ul> <ul>
{list.map((user) => ( {list.map((admin) => (
<li key={user.name}>{JSON.stringify(user, null, 2)}</li> <li key={admin.id}>{JSON.stringify(admin, null, 2)}</li>
))} ))}
</ul> </ul>
<div> <div>
<h3>Counter</h3> <h3>Counter</h3>
<p>{count}</p> <p>{count.value}</p>
<button onClick={decreaseCounter}>-1</button> <button onClick={decreaseCounter}>-1</button>
<button onClick={increaseCounter}>+1</button> <button onClick={increaseCounter}>+1</button>
</div> </div>
<br />
</> </>
); );
}; };

View file

@ -1,4 +1,4 @@
import React from 'react'; import * as React from 'react';
import { useStore } from '@nanostores/react'; import { useStore } from '@nanostores/react';
import { admins } from '../store/admins.js'; import { admins } from '../store/admins.js';
@ -7,17 +7,18 @@ import { counter, increaseCounter, decreaseCounter } from '../store/counter.js';
const AdminsReact = () => { const AdminsReact = () => {
const list = useStore(admins); const list = useStore(admins);
const count = useStore(counter); const count = useStore(counter);
return ( return (
<> <>
<h1>React</h1> <h1>React</h1>
<ul> <ul>
{list.map((user) => ( {list.map((admin) => (
<li key={user.name}>{JSON.stringify(user, null, 2)}</li> <li key={admin.id}>{JSON.stringify(admin, null, 2)}</li>
))} ))}
</ul> </ul>
<div> <div>
<h3>Counter</h3> <h3>Counter</h3>
<p>{count}</p> <p>{count.value}</p>
<button onClick={decreaseCounter}>-1</button> <button onClick={decreaseCounter}>-1</button>
<button onClick={increaseCounter}>+1</button> <button onClick={increaseCounter}>+1</button>
</div> </div>

View file

@ -0,0 +1,30 @@
import { createSignal } from 'solid-js';
import { useStore } from 'solid-nanostores';
import { admins } from '../store/admins.js';
import { counter, increaseCounter, decreaseCounter } from '../store/counter.js';
const AdminsSolid = () => {
const list = useStore(admins);
const count = useStore(counter);
return (
<>
<h1>Solid</h1>
<ul>
{list.map((admin) => (
<li key={admin.id}>{JSON.stringify(admin, null, 2)}</li>
))}
</ul>
<div>
<h3>Counter</h3>
<p>{count.value}</p>
<button onClick={decreaseCounter}>-1</button>
<button onClick={increaseCounter}>+1</button>
</div>
<br />
</>
);
}
export default AdminsSolid;

View file

@ -1,19 +1,17 @@
<script> <script>
import { users } from '../store/users.js'; import { admins } from '../store/admins.js';
import { counter, increaseCounter, decreaseCounter } from '../store/counter.js'; import { counter, increaseCounter, decreaseCounter } from '../store/counter.js';
const list = users.get().filter((user) => user.isAdmin);
</script> </script>
<h1>Svelte</h1> <h1>Svelte</h1>
<ul> <ul>
{#each list as user} {#each $admins as admin}
<li>{JSON.stringify(user, null, 2)}</li> <li>{JSON.stringify(admin, null, 2)}</li>
{/each} {/each}
</ul> </ul>
<div> <div>
<h3>Counter</h3> <h3>Counter</h3>
<p>{$counter}</p> <p>{$counter.value}</p>
<button on:click={decreaseCounter}>-1</button> <button on:click={decreaseCounter}>-1</button>
<button on:click={increaseCounter}>+1</button> <button on:click={increaseCounter}>+1</button>
</div> </div>

View file

@ -2,13 +2,13 @@
<div> <div>
<h1>Vue</h1> <h1>Vue</h1>
<ul> <ul>
<li v-for="user in list" :key="user.name"> <li v-for="admin in list" :key="admin.id">
{{ JSON.stringify(user, null, 2) }} {{ JSON.stringify(admin, null, 2) }}
</li> </li>
</ul> </ul>
<div> <div>
<h3>Counter</h3> <h3>Counter</h3>
<p>{{ count }}</p> <p>{{ count.value }}</p>
<button @click="decreaseCounter">-1</button> <button @click="decreaseCounter">-1</button>
<button @click="increaseCounter">+1</button> <button @click="increaseCounter">+1</button>
</div> </div>
@ -26,6 +26,7 @@ export default {
setup() { setup() {
const list = useStore(admins); const list = useStore(admins);
const count = useStore(counter); const count = useStore(counter);
return { list, count, increaseCounter, decreaseCounter }; return { list, count, increaseCounter, decreaseCounter };
}, },
}; };

View file

@ -4,6 +4,7 @@ import AdminsReact from '../components/AdminsReact.jsx';
import AdminsSvelte from '../components/AdminsSvelte.svelte'; import AdminsSvelte from '../components/AdminsSvelte.svelte';
import AdminsVue from '../components/AdminsVue.vue'; import AdminsVue from '../components/AdminsVue.vue';
import AdminsPreact from '../components/AdminsPreact.jsx'; import AdminsPreact from '../components/AdminsPreact.jsx';
import AdminsSolid from '../components/AdminsSolid.jsx';
// Full Astro Component Syntax: // Full Astro Component Syntax:
// https://docs.astro.build/core-concepts/astro-components/ // https://docs.astro.build/core-concepts/astro-components/
@ -41,6 +42,7 @@ import AdminsPreact from '../components/AdminsPreact.jsx';
<AdminsSvelte client:load /> <AdminsSvelte client:load />
<AdminsVue client:load /> <AdminsVue client:load />
<AdminsPreact client:load /> <AdminsPreact client:load />
<AdminsSolid client:load />
</main> </main>
</body> </body>
</html> </html>

View file

@ -1,13 +1,15 @@
import { atom } from 'nanostores'; import { atom } from 'nanostores';
const counter = atom(0); const initialValue = { value: 0 };
const counter = atom(initialValue);
function increaseCounter() { function increaseCounter() {
counter.set(counter.get() + 1); counter.set({ value: counter.get().value + 1 });
} }
function decreaseCounter() { function decreaseCounter() {
counter.set(counter.get() - 1); counter.set({ value: counter.get().value - 1 });
} }
export { counter, increaseCounter, decreaseCounter }; export { counter, increaseCounter, decreaseCounter };

View file

@ -1,22 +1,27 @@
import { atom } from 'nanostores'; import { atom } from 'nanostores';
const users = atom([ const initialValue = [
{ {
name: 'Imanadmin', id: 1,
age: 2, name: 'User Admin',
age: 28,
isAdmin: true, isAdmin: true,
}, },
{ {
name: 'Imnotadmin', id: 2,
name: 'NOT Admin',
age: 35, age: 35,
isAdmin: false, isAdmin: false,
}, },
{ {
name: 'Wowsomuchadmin', id: 3,
age: 3634, name: 'Another Admin',
age: 46,
isAdmin: true, isAdmin: true,
}, },
]); ]
const users = atom(initialValue);
const addUser = function addUser(user) { const addUser = function addUser(user) {
users.set([...users.get(), user]); users.set([...users.get(), user]);