├── .npmrc ├── src ├── routes │ ├── (hooks) │ │ ├── useEffect │ │ │ ├── +page.svelte │ │ │ ├── svelte.svelte │ │ │ ├── +page.ts │ │ │ └── react.jsx │ │ ├── useMemo │ │ │ ├── +page.svelte │ │ │ ├── svelte.svelte │ │ │ ├── +page.ts │ │ │ └── react.jsx │ │ ├── useRef │ │ │ ├── +page.svelte │ │ │ ├── svelte.svelte │ │ │ ├── +page.ts │ │ │ └── react.jsx │ │ ├── useState │ │ │ ├── +page.svelte │ │ │ ├── svelte.svelte │ │ │ ├── +page.ts │ │ │ └── react.jsx │ │ ├── useCallback │ │ │ ├── +page.svelte │ │ │ ├── +page.ts │ │ │ ├── svelte.svelte │ │ │ └── react.jsx │ │ ├── useContext │ │ │ ├── +page.svelte │ │ │ ├── +page.ts │ │ │ ├── svelte.svelte │ │ │ └── react.jsx │ │ ├── useReducer │ │ │ ├── +page.svelte │ │ │ ├── +page.ts │ │ │ ├── svelte.svelte │ │ │ └── react.jsx │ │ ├── Header.svelte │ │ ├── Snippet.svelte │ │ └── +layout.svelte │ ├── +error.svelte │ ├── +page.svelte │ └── +layout.svelte ├── app.postcss ├── lib │ ├── types.ts │ ├── icons │ │ ├── Svelte.svelte │ │ ├── Code.svelte │ │ ├── Home.svelte │ │ ├── React.svelte │ │ └── GitHub.svelte │ ├── store.ts │ └── Icon.svelte ├── app.d.ts └── app.html ├── static └── favicon.png ├── postcss.config.cjs ├── vite.config.ts ├── .gitignore ├── .eslintignore ├── .prettierignore ├── .prettierrc ├── svelte.config.js ├── .eslintrc.cjs ├── tsconfig.json ├── tailwind.config.cjs ├── README.md └── package.json /.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict=true 2 | -------------------------------------------------------------------------------- /src/routes/(hooks)/useEffect/+page.svelte: -------------------------------------------------------------------------------- 1 | 3 | -------------------------------------------------------------------------------- /src/routes/(hooks)/useMemo/+page.svelte: -------------------------------------------------------------------------------- 1 | 3 | -------------------------------------------------------------------------------- /src/routes/(hooks)/useRef/+page.svelte: -------------------------------------------------------------------------------- 1 | 3 | -------------------------------------------------------------------------------- /src/routes/(hooks)/useState/+page.svelte: -------------------------------------------------------------------------------- 1 | 3 | -------------------------------------------------------------------------------- /src/routes/(hooks)/useCallback/+page.svelte: -------------------------------------------------------------------------------- 1 | 3 | -------------------------------------------------------------------------------- /src/routes/(hooks)/useContext/+page.svelte: -------------------------------------------------------------------------------- 1 | 3 | -------------------------------------------------------------------------------- /src/routes/(hooks)/useReducer/+page.svelte: -------------------------------------------------------------------------------- 1 | 3 | -------------------------------------------------------------------------------- /src/app.postcss: -------------------------------------------------------------------------------- 1 | /*place global styles here */ 2 | html, body { @apply h-full overflow-hidden; } -------------------------------------------------------------------------------- /static/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadthe/react-hooks-in-svelte/HEAD/static/favicon.png -------------------------------------------------------------------------------- /postcss.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } -------------------------------------------------------------------------------- /src/routes/(hooks)/Header.svelte: -------------------------------------------------------------------------------- 1 |
fib({value}) = {result}
11 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "useTabs": true, 3 | "semi": false, 4 | "trailingComma": "none", 5 | "printWidth": 120, 6 | "plugins": ["prettier-plugin-svelte"], 7 | "pluginSearchDirs": ["."], 8 | "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }] 9 | } 10 | -------------------------------------------------------------------------------- /src/app.d.ts: -------------------------------------------------------------------------------- 1 | // See https://kit.svelte.dev/docs/types#app 2 | // for information about these interfaces 3 | // and what to do when importing types 4 | declare namespace App { 5 | // interface Locals {} 6 | // interface PageData {} 7 | // interface Error {} 8 | // interface Platform {} 9 | } 10 | -------------------------------------------------------------------------------- /src/routes/(hooks)/useEffect/svelte.svelte: -------------------------------------------------------------------------------- 1 | 14 | 15 | Timer: {count} 16 | -------------------------------------------------------------------------------- /src/routes/(hooks)/useMemo/+page.ts: -------------------------------------------------------------------------------- 1 | import type { PageLoad } from "./$types" 2 | 3 | export const load = (async ({ params }) => { 4 | return { 5 | title: "useMemo", 6 | react: (await import("./react.jsx?raw")).default, 7 | svelte: (await import("./svelte.svelte?raw")).default, 8 | } 9 | }) satisfies PageLoad 10 | -------------------------------------------------------------------------------- /src/routes/(hooks)/useRef/+page.ts: -------------------------------------------------------------------------------- 1 | import type { PageLoad } from "./$types" 2 | 3 | export const load = (async ({ params }) => { 4 | return { 5 | title: "useRef", 6 | react: (await import("./react.jsx?raw")).default, 7 | svelte: (await import("./svelte.svelte?raw")).default, 8 | } 9 | }) satisfies PageLoad 10 | -------------------------------------------------------------------------------- /src/routes/(hooks)/useState/+page.ts: -------------------------------------------------------------------------------- 1 | import type { PageLoad } from "./$types" 2 | 3 | export const load = (async ({ params }) => { 4 | return { 5 | title: "useState", 6 | react: (await import("./react.jsx?raw")).default, 7 | svelte: (await import("./svelte.svelte?raw")).default, 8 | } 9 | }) satisfies PageLoad 10 | -------------------------------------------------------------------------------- /src/routes/(hooks)/useContext/+page.ts: -------------------------------------------------------------------------------- 1 | import type { PageLoad } from "./$types" 2 | 3 | export const load = (async ({ params }) => { 4 | return { 5 | title: "useContext", 6 | react: (await import("./react.jsx?raw")).default, 7 | svelte: (await import("./svelte.svelte?raw")).default, 8 | } 9 | }) satisfies PageLoad 10 | -------------------------------------------------------------------------------- /src/routes/(hooks)/useEffect/+page.ts: -------------------------------------------------------------------------------- 1 | import type { PageLoad } from "./$types" 2 | 3 | export const load = (async ({ params }) => { 4 | return { 5 | title: "useEffect", 6 | react: (await import("./react.jsx?raw")).default, 7 | svelte: (await import("./svelte.svelte?raw")).default, 8 | } 9 | }) satisfies PageLoad 10 | -------------------------------------------------------------------------------- /src/routes/(hooks)/useReducer/+page.ts: -------------------------------------------------------------------------------- 1 | import type { PageLoad } from "./$types" 2 | 3 | export const load = (async ({ params }) => { 4 | return { 5 | title: "useReducer", 6 | react: (await import("./react.jsx?raw")).default, 7 | svelte: (await import("./svelte.svelte?raw")).default, 8 | } 9 | }) satisfies PageLoad 10 | -------------------------------------------------------------------------------- /src/routes/(hooks)/useCallback/+page.ts: -------------------------------------------------------------------------------- 1 | import type { PageLoad } from "./$types" 2 | 3 | export const load = (async ({ params }) => { 4 | return { 5 | title: "useCallback", 6 | react: (await import("./react.jsx?raw")).default, 7 | svelte: (await import("./svelte.svelte?raw")).default, 8 | } 9 | }) satisfies PageLoad 10 | -------------------------------------------------------------------------------- /svelte.config.js: -------------------------------------------------------------------------------- 1 | import adapter from '@sveltejs/adapter-auto'; 2 | import { vitePreprocess } from '@sveltejs/kit/vite'; 3 | 4 | /** @type {import('@sveltejs/kit').Config} */ 5 | const config = { 6 | kit: { 7 | adapter: adapter() 8 | }, 9 | preprocess: [ 10 | vitePreprocess({ 11 | postcss: true 12 | }) 13 | ], 14 | }; 15 | 16 | export default config; 17 | -------------------------------------------------------------------------------- /src/routes/(hooks)/useCallback/svelte.svelte: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /src/routes/+error.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 |fib({value}) = {result}
18 | > 19 | ) 20 | } 21 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./.svelte-kit/tsconfig.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "checkJs": true, 6 | "esModuleInterop": true, 7 | "forceConsistentCasingInFileNames": true, 8 | "resolveJsonModule": true, 9 | "skipLibCheck": true, 10 | "sourceMap": true, 11 | "strict": true 12 | } 13 | // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias 14 | // 15 | // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes 16 | // from the referenced tsconfig.json - TypeScript does not merge them in 17 | } 18 | -------------------------------------------------------------------------------- /tailwind.config.cjs: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | darkMode: 'class', 4 | content: ['./src/**/*.{html,js,svelte,ts}', require('path').join(require.resolve('@skeletonlabs/skeleton'), '../**/*.{html,js,svelte,ts}')], 5 | theme: { 6 | extend: { 7 | colors: { 8 | 'svelte': '#ff3e00', 9 | 'react': '#61dafb', 10 | } 11 | }, 12 | }, 13 | plugins: [require('@tailwindcss/forms'), require('@tailwindcss/typography'), require('@tailwindcss/line-clamp'), ...require('@skeletonlabs/skeleton/tailwind/skeleton.cjs')()], 14 | } 15 | -------------------------------------------------------------------------------- /src/routes/(hooks)/Snippet.svelte: -------------------------------------------------------------------------------- 1 | 10 | 11 |23 | Side-by-side code examples of React hooks implemented in Svelte. A reference for developers who need to work 24 | across Svelte and React. 25 |
26 |