@@ -16,6 +16,7 @@ import { Route as TimeImport } from './routes/time'
|
|||||||
import { Route as TestsImport } from './routes/tests'
|
import { Route as TestsImport } from './routes/tests'
|
||||||
import { Route as PromiseImport } from './routes/promise'
|
import { Route as PromiseImport } from './routes/promise'
|
||||||
import { Route as LazyrefImport } from './routes/lazyref'
|
import { Route as LazyrefImport } from './routes/lazyref'
|
||||||
|
import { Route as EffectComponentTestsImport } from './routes/effect-component-tests'
|
||||||
import { Route as CountImport } from './routes/count'
|
import { Route as CountImport } from './routes/count'
|
||||||
import { Route as BlankImport } from './routes/blank'
|
import { Route as BlankImport } from './routes/blank'
|
||||||
import { Route as IndexImport } from './routes/index'
|
import { Route as IndexImport } from './routes/index'
|
||||||
@@ -56,6 +57,12 @@ const LazyrefRoute = LazyrefImport.update({
|
|||||||
getParentRoute: () => rootRoute,
|
getParentRoute: () => rootRoute,
|
||||||
} as any)
|
} as any)
|
||||||
|
|
||||||
|
const EffectComponentTestsRoute = EffectComponentTestsImport.update({
|
||||||
|
id: '/effect-component-tests',
|
||||||
|
path: '/effect-component-tests',
|
||||||
|
getParentRoute: () => rootRoute,
|
||||||
|
} as any)
|
||||||
|
|
||||||
const CountRoute = CountImport.update({
|
const CountRoute = CountImport.update({
|
||||||
id: '/count',
|
id: '/count',
|
||||||
path: '/count',
|
path: '/count',
|
||||||
@@ -123,6 +130,13 @@ declare module '@tanstack/react-router' {
|
|||||||
preLoaderRoute: typeof CountImport
|
preLoaderRoute: typeof CountImport
|
||||||
parentRoute: typeof rootRoute
|
parentRoute: typeof rootRoute
|
||||||
}
|
}
|
||||||
|
'/effect-component-tests': {
|
||||||
|
id: '/effect-component-tests'
|
||||||
|
path: '/effect-component-tests'
|
||||||
|
fullPath: '/effect-component-tests'
|
||||||
|
preLoaderRoute: typeof EffectComponentTestsImport
|
||||||
|
parentRoute: typeof rootRoute
|
||||||
|
}
|
||||||
'/lazyref': {
|
'/lazyref': {
|
||||||
id: '/lazyref'
|
id: '/lazyref'
|
||||||
path: '/lazyref'
|
path: '/lazyref'
|
||||||
@@ -195,6 +209,7 @@ export interface FileRoutesByFullPath {
|
|||||||
'/': typeof IndexRoute
|
'/': typeof IndexRoute
|
||||||
'/blank': typeof BlankRoute
|
'/blank': typeof BlankRoute
|
||||||
'/count': typeof CountRoute
|
'/count': typeof CountRoute
|
||||||
|
'/effect-component-tests': typeof EffectComponentTestsRoute
|
||||||
'/lazyref': typeof LazyrefRoute
|
'/lazyref': typeof LazyrefRoute
|
||||||
'/promise': typeof PromiseRoute
|
'/promise': typeof PromiseRoute
|
||||||
'/tests': typeof TestsRoute
|
'/tests': typeof TestsRoute
|
||||||
@@ -210,6 +225,7 @@ export interface FileRoutesByTo {
|
|||||||
'/': typeof IndexRoute
|
'/': typeof IndexRoute
|
||||||
'/blank': typeof BlankRoute
|
'/blank': typeof BlankRoute
|
||||||
'/count': typeof CountRoute
|
'/count': typeof CountRoute
|
||||||
|
'/effect-component-tests': typeof EffectComponentTestsRoute
|
||||||
'/lazyref': typeof LazyrefRoute
|
'/lazyref': typeof LazyrefRoute
|
||||||
'/promise': typeof PromiseRoute
|
'/promise': typeof PromiseRoute
|
||||||
'/tests': typeof TestsRoute
|
'/tests': typeof TestsRoute
|
||||||
@@ -226,6 +242,7 @@ export interface FileRoutesById {
|
|||||||
'/': typeof IndexRoute
|
'/': typeof IndexRoute
|
||||||
'/blank': typeof BlankRoute
|
'/blank': typeof BlankRoute
|
||||||
'/count': typeof CountRoute
|
'/count': typeof CountRoute
|
||||||
|
'/effect-component-tests': typeof EffectComponentTestsRoute
|
||||||
'/lazyref': typeof LazyrefRoute
|
'/lazyref': typeof LazyrefRoute
|
||||||
'/promise': typeof PromiseRoute
|
'/promise': typeof PromiseRoute
|
||||||
'/tests': typeof TestsRoute
|
'/tests': typeof TestsRoute
|
||||||
@@ -243,6 +260,7 @@ export interface FileRouteTypes {
|
|||||||
| '/'
|
| '/'
|
||||||
| '/blank'
|
| '/blank'
|
||||||
| '/count'
|
| '/count'
|
||||||
|
| '/effect-component-tests'
|
||||||
| '/lazyref'
|
| '/lazyref'
|
||||||
| '/promise'
|
| '/promise'
|
||||||
| '/tests'
|
| '/tests'
|
||||||
@@ -257,6 +275,7 @@ export interface FileRouteTypes {
|
|||||||
| '/'
|
| '/'
|
||||||
| '/blank'
|
| '/blank'
|
||||||
| '/count'
|
| '/count'
|
||||||
|
| '/effect-component-tests'
|
||||||
| '/lazyref'
|
| '/lazyref'
|
||||||
| '/promise'
|
| '/promise'
|
||||||
| '/tests'
|
| '/tests'
|
||||||
@@ -271,6 +290,7 @@ export interface FileRouteTypes {
|
|||||||
| '/'
|
| '/'
|
||||||
| '/blank'
|
| '/blank'
|
||||||
| '/count'
|
| '/count'
|
||||||
|
| '/effect-component-tests'
|
||||||
| '/lazyref'
|
| '/lazyref'
|
||||||
| '/promise'
|
| '/promise'
|
||||||
| '/tests'
|
| '/tests'
|
||||||
@@ -287,6 +307,7 @@ export interface RootRouteChildren {
|
|||||||
IndexRoute: typeof IndexRoute
|
IndexRoute: typeof IndexRoute
|
||||||
BlankRoute: typeof BlankRoute
|
BlankRoute: typeof BlankRoute
|
||||||
CountRoute: typeof CountRoute
|
CountRoute: typeof CountRoute
|
||||||
|
EffectComponentTestsRoute: typeof EffectComponentTestsRoute
|
||||||
LazyrefRoute: typeof LazyrefRoute
|
LazyrefRoute: typeof LazyrefRoute
|
||||||
PromiseRoute: typeof PromiseRoute
|
PromiseRoute: typeof PromiseRoute
|
||||||
TestsRoute: typeof TestsRoute
|
TestsRoute: typeof TestsRoute
|
||||||
@@ -302,6 +323,7 @@ const rootRouteChildren: RootRouteChildren = {
|
|||||||
IndexRoute: IndexRoute,
|
IndexRoute: IndexRoute,
|
||||||
BlankRoute: BlankRoute,
|
BlankRoute: BlankRoute,
|
||||||
CountRoute: CountRoute,
|
CountRoute: CountRoute,
|
||||||
|
EffectComponentTestsRoute: EffectComponentTestsRoute,
|
||||||
LazyrefRoute: LazyrefRoute,
|
LazyrefRoute: LazyrefRoute,
|
||||||
PromiseRoute: PromiseRoute,
|
PromiseRoute: PromiseRoute,
|
||||||
TestsRoute: TestsRoute,
|
TestsRoute: TestsRoute,
|
||||||
@@ -326,6 +348,7 @@ export const routeTree = rootRoute
|
|||||||
"/",
|
"/",
|
||||||
"/blank",
|
"/blank",
|
||||||
"/count",
|
"/count",
|
||||||
|
"/effect-component-tests",
|
||||||
"/lazyref",
|
"/lazyref",
|
||||||
"/promise",
|
"/promise",
|
||||||
"/tests",
|
"/tests",
|
||||||
@@ -346,6 +369,9 @@ export const routeTree = rootRoute
|
|||||||
"/count": {
|
"/count": {
|
||||||
"filePath": "count.tsx"
|
"filePath": "count.tsx"
|
||||||
},
|
},
|
||||||
|
"/effect-component-tests": {
|
||||||
|
"filePath": "effect-component-tests.tsx"
|
||||||
|
},
|
||||||
"/lazyref": {
|
"/lazyref": {
|
||||||
"filePath": "lazyref.tsx"
|
"filePath": "lazyref.tsx"
|
||||||
},
|
},
|
||||||
|
|||||||
42
packages/example/src/routes/effect-component-tests.tsx
Normal file
42
packages/example/src/routes/effect-component-tests.tsx
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
import { Box, Text, TextField } from "@radix-ui/themes"
|
||||||
|
import { createFileRoute } from "@tanstack/react-router"
|
||||||
|
import { Console, Effect, Runtime } from "effect"
|
||||||
|
import * as React from "react"
|
||||||
|
|
||||||
|
|
||||||
|
export const Route = createFileRoute("/effect-component-tests")({
|
||||||
|
component: RouteComponent,
|
||||||
|
})
|
||||||
|
|
||||||
|
function RouteComponent() {
|
||||||
|
return Effect.runSync(MyTestComponent)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const MyTestComponent = Effect.gen(function*() {
|
||||||
|
const [state, setState] = React.useState("value")
|
||||||
|
const effectValue = yield* Effect.succeed(`state: ${ state }`)
|
||||||
|
|
||||||
|
yield* useEffect(() => Console.log("ouient"), [state])
|
||||||
|
|
||||||
|
return <>
|
||||||
|
<Text>{effectValue}</Text>
|
||||||
|
|
||||||
|
<Box>
|
||||||
|
<TextField.Root
|
||||||
|
value={state}
|
||||||
|
onChange={e => setState(e.target.value)}
|
||||||
|
/>
|
||||||
|
</Box>
|
||||||
|
</>
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
const useEffect = <A, E, R>(
|
||||||
|
effect: () => Effect.Effect<A, E, R>,
|
||||||
|
deps?: React.DependencyList,
|
||||||
|
): Effect.Effect<void, never, R> => Effect.gen(function* useEffect() {
|
||||||
|
const runtime = yield* Effect.runtime<R>()
|
||||||
|
|
||||||
|
React.useEffect(() => Runtime.runSync(runtime)(Effect.asVoid(effect())), deps)
|
||||||
|
})
|
||||||
Reference in New Issue
Block a user