# Discussion: Transient Objects
```typescript=
import { GenericTransient} from '@builder.io/qwik';
interface GenericTransient {
[key: string]: any;
}
export interface MyVolatileState {
getCompiler(): Promise<Compiler>
}
const MyComponent = component$(() => {
const store = createStore({
compilerVersion: '0.0.1',
input: 'export const answer = 42;',
output: null,
},{
getCompiler: $((obs) => {
const {compilerVersion} = obs(store);
return await fetch(`...${compilerVersion}`);
})
});
const tStore = createTransient({
getCompiler: $((obs) => {
const {compilerVersion} = obs(store);
return await fetch(`...${compilerVersion}`);
}),
getDefaultCompiler: $(() => {
const compilerVersion = 'latest';
return await fetch(`...${compilerVersion}`);
}),
});
const transientObj = createTransient();
return onRender$(() => (
<>
<button on$:click={() => {
const compiler = await getCompiler();
const store.output = compiler(store.input);
}}>compile</button>
</>
))
});
```
```typescript=
const MyComponent = component$(() => {
const store = createStore({
compilerVersion: '0.0.1',
});
const getCompiler = createTransient$((obs) => {
const {compilerVersion} = obs(store);
return Promise.resolve(compilerVersion);
// What about chaining transients? How does that work with observables
})
// This watches 'version' to load the compiler
onWatch$((obs) => {
const {compilerVersion} = obs(store);
// This is wrong, cuz we dont want to serialize the compiler
const compiler = await getCompiler();
// WHERE DO WE STORE THE OPTIMIZER?
});
// This watches 'code' to compile it
onWatch$((obs) => {
const {code, version} = obs(store);
const compiler = await getCompiler();
});
return onRender$(() => (
<>
<button on$:click={
const tempPromise = useTransient(store, GetTemp);
}>a</button>
<button on$:click={
const tempPromise = useTransient(store, GetTemp);
}>a</button>
</>
))
});
```
## Manu version
```typescript=
interface Transient {
optimizer: Optimizer | undefined,
}
function GetCompiler(this: {compilerVersion: string}) {
return Promise.resolve(this.compilerVersion);
}
function getCompiler(version: string) {
return useTransient(null, GetCompiler, version);
}
const MyComponent = component$(() => {
const store = createStore({
compilerVersion: '0.0.1',
});
const transientStore = createTransientStore<Transient>(); // existance of transient (not content) Record<string, T | undefined>
// This watches 'version' to load the compiler
onWatch$((obs) => {
const {compilerVersion} = obs(store);
transientStore.optimizer = await useTransient(GetCompiler);
});
// This watches 'code' to compile it
onWatch$((obs) => {
const {code, version} = obs(store);
const {optimizer} = obs(transientStore);
if (optimizer) {
const optimizer = await useTransient(null, GetCompiler, version);
const results = await optimizer.compile(code)
store.modules = results.modules;
}
});
return onRender$(() => (
<>
<button on$:click={
const tempPromise = useTransient(store, GetTemp);
}>a</button>
<button on$:click={
const tempPromise = useTransient(store, GetTemp);
}>a</button>
</>
))
});
```
## Manu
```htmlembedded=
<div on:q-watch="!s12.value !s12.code !t1.code">
</div>
```
```typescript
createStore() => s12
createTransient() => t1
"s12": {
"key": "adam",
"value": 'misko'
},
"t1": {
__type__: 'transient'
}
```