Skip to main content

Module: delegate

Functions

delegate

delegate<T, K, O>(module, key, args, options?): O extends false ? void : ReturnType<T[K]> extends Promise<R> ? Promise<R> : Promise<ReturnType<T[K]>>

Proxy execute On the server side.

Description

delegate() is very similar to the actor model, which transfers the corresponding module method to the server thread for execution and returns the result as response.

Note: It does not create new threads, it always runs on the server thread that has already been created.

Example

import React from 'react';
import { ViewModule, createApp, injectable, useConnector, action, state, delegate } from 'reactant-share';

@injectable({ name: 'counter'})
class Counter {
@state
count = 0;

@action
increase() {
this.count += 1;
}
}

@injectable()
export class AppView extends ViewModule {
constructor(public counter: Counter) {
super();
}

component() {
const count = useConnector(() => this.counter.count);
return (
<button type="button" onClick={() => delegate(this.counter, 'increase', [])}>
{count}
</button>
);
}
}

reference: https://en.wikipedia.org/wiki/Actor_model

Type parameters

NameType
Textends Record<string | number | symbol, any>
Kextends string | number | symbol
Oextends undefined | boolean

Parameters

NameTypeDescription
moduleTDesignate an execution module from the server side.
keyKSpecify the name of a method in this module.
argsParameters<T[K]>Pass in the parameters for this method.
options?{ clientIds?: string[] ; portName?: string ; respond?: O } & Pick<EmitParameter<any>, "timeout" | "_extra" | "silent" | "skipBeforeEmit">proxy execution options

Returns

O extends false ? void : ReturnType<T[K]> extends Promise<R> ? Promise<R> : Promise<ReturnType<T[K]>>

Defined in

interfaces.ts:209