Skip to main content

computeFrom()

function computeFrom<TForm, TTarget>(
sources,
target,
computeFn,
options?): void;

Defined in: core/behavior/behaviors/compute-from.ts:82

АвтоматичСски вычисляСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля Π½Π° основС Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΠ»Π΅ΠΉ

Type Parameters​

TForm​

TForm

TTarget​

TTarget

Parameters​

sources​

FieldPathNode<TForm, any, unknown>[]

Массив ΠΏΠΎΠ»Π΅ΠΉ-зависимостСй

target​

FieldPathNode<TForm, TTarget>

ПолС для записи Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°

computeFn​

(values) => TTarget

Ѐункция вычислСния (ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΏΠΎΠ»Π΅ΠΉ)

options?​

ComputeFromOptions<TForm>

ΠžΠΏΡ†ΠΈΠΈ (debounce, condition, trigger)

Returns​

void

Examples​

import { computeFrom, type BehaviorSchemaFn } from '@reformer/core/behaviors';

interface OrderForm {
price: number;
quantity: number;
total: number;
}

export const orderBehavior: BehaviorSchemaFn<OrderForm> = (path) => {
computeFrom(
[path.price, path.quantity],
path.total,
(values) =>
(typeof values.price === 'number' ? values.price : 0) *
(typeof values.quantity === 'number' ? values.quantity : 0),
);
};
import { computeFrom, type BehaviorSchemaFn } from '@reformer/core/behaviors';

interface MortgageForm {
loanType: 'mortgage' | 'consumer';
loanAmount: number;
loanTerm: number;
interestRate: number;
monthlyPayment: number;
}

function annuity(values: MortgageForm): number {
const { loanAmount, loanTerm, interestRate } = values;
if (!loanAmount || !loanTerm || !interestRate) return 0;
const r = interestRate / 100 / 12;
const n = loanTerm;
return Math.round((loanAmount * r * Math.pow(1 + r, n)) / (Math.pow(1 + r, n) - 1));
}

export const mortgageBehavior: BehaviorSchemaFn<MortgageForm> = (path) => {
computeFrom(
[path.loanAmount, path.loanTerm, path.interestRate],
path.monthlyPayment,
annuity,
{
debounce: 300, // Π½Π΅ пСрСсчитываСм Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ keystroke
condition: (form) => form.loanType === 'mortgage', // считаСм Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΈΠΏΠΎΡ‚Π΅ΠΊΠΈ
},
);
};

See​

docs/llms/20-compute-vs-watch.md