Я использую lit- html, и мне кажется, что мне не удается обновить средство визуализации или запустить какую-либо функцию при вводе пользователем. Я хочу проверить поле ввода при наборе текста. Я не могу найти в Интернете никаких примеров, показывающих реакцию на ввод данных пользователем.
Вот полный код.
my_input.ts
import {html, directive, Part} from 'lit-html';
const stateMap = new WeakMap();
export const stateManager = directive(() => (part: Part) => {
let mystate: IInputData = stateMap.get(part);
if(mystate === undefined)
{
mystate = {
auto_id: Math.floor(Math.random() * 100000 + 1),
helper_eval: "",
input_message: "",
tab_index: 0,
input_value: "",
span_message: "",
}
stateMap.set(part, mystate);
}
else {
console.log("Hey");
part.setValue(mystate);
part.commit();
}
});
export interface IInputData {
auto_id: number,
helper_eval: string,
input_message: string,
tab_index: number,
input_value: string,
span_message: string
}
export let my_input = () => {
let d: IInputData = stateManager() as unknown as IInputData;
return html`
<section>
<label for="${d.auto_id}"
title="${d.helper_eval}">
${d.input_message} ⓘ
<span class="float_left">
${d.span_message}
</span>
</label>
<input id="${d.auto_id}"
tabindex="${d.tab_index}" value="${d.input_value}">
</input>
<section>
`;
}
app.ts
const myTemplate = () => html`
<div>
${renderCounter(0)}
</div>`;
const renderCounter = directive((initialValue) => (part: any) => {
if(part.value === undefined)
{
part.setValue(initialValue);
}
else { part.setValue(part.value +1)}
}
);
export let app = (data: TemplateResult[]) => html`
${data}
`;
render(app([my_input(), myTemplate]), document.body);
Я включил пример подсчета рендеринга и не вижу увеличения счетчика рендеринга при вводе в поле ввода. Я также не уверен, как добавить хуки, чтобы отреагировать на IInputData
это изменение в этом шаблоне. Лучше всего добавить в директиву stateManager
некую функцию обратного вызова.