Dojo 2 如何实现输入的双向绑定?
Dojo 2 How to achieve two-way binding for input?
如何在 dojo 2 中实现输入的 2 路数据绑定?
handleChange = (e) => {
this.setState({ textValue: e.target.value });}
<Input name='title' defaultValue={this.state.textValue} placeholder='title...' onChange={this.handleChange} />
我知道这是我们在 React 中的做法,但不知道如何在 dojo 2 中实现。
事实上,React 仅支持单向绑定,您的示例很好地说明了这一点。您需要更新状态,重新渲染反应组件。
据我从 dojo2 文档和教程中了解到,在幕后有几乎相同的方法。看看here
Dojo 2 is built around unidirectional, top-down property propagation where it is the parent widget’s job to pass properties down to its children. In fact, a child widget has no direct reference to a parent widget! When a property changes, widgets are re-rendered (using an efficient virtual DOM) to reflect the updated state.
它可能看起来像这样:
private _addWorker() {
this._workerData = this._workerData.concat(this._newWorker);
this._newWorker = {};
this.invalidate();
}
您更改数据并调用 invalidate() 以重新呈现小部件。
这是在 Dojo 2 中实现双向数据绑定的解决方案。
输入控件:-
interface IInputProps {
value: string;
onChange(event: Event): void;
}
export class InputWidget extends WidgetBase<IInputProps> {
private _onChange (event: Event) {
event.stopPropagation();
this.properties.onChange && this.properties.onChange((event.target as HTMLInputElement).value);
}
protected render(): DNode {
const { value } = this.properties;
return v('input', {
key: "input",
type: "text",
value
onchange: this._onChange
});
}
}
InputWrapper 小部件:-
export class InputWrapper extends WidgetBase<IWrapperProps> {
private inputValue: string = '';
protected inputValueChanges(value: string) {
this.inputValue = value;
this.invalidate();
}
protected render(): DNode {
<div>
{w(InputWidget, {onchange: this.inputValueChanges, value: this.inputValue })}
<span>Input Value:- {this.inputValue}</span>
</div>
}
}
这是在 Dojo 2 中实现双向数据绑定的解决方案。
希望对您有所帮助! :(
如何在 dojo 2 中实现输入的 2 路数据绑定?
handleChange = (e) => {
this.setState({ textValue: e.target.value });}
<Input name='title' defaultValue={this.state.textValue} placeholder='title...' onChange={this.handleChange} />
我知道这是我们在 React 中的做法,但不知道如何在 dojo 2 中实现。
事实上,React 仅支持单向绑定,您的示例很好地说明了这一点。您需要更新状态,重新渲染反应组件。 据我从 dojo2 文档和教程中了解到,在幕后有几乎相同的方法。看看here
Dojo 2 is built around unidirectional, top-down property propagation where it is the parent widget’s job to pass properties down to its children. In fact, a child widget has no direct reference to a parent widget! When a property changes, widgets are re-rendered (using an efficient virtual DOM) to reflect the updated state.
它可能看起来像这样:
private _addWorker() {
this._workerData = this._workerData.concat(this._newWorker);
this._newWorker = {};
this.invalidate();
}
您更改数据并调用 invalidate() 以重新呈现小部件。
这是在 Dojo 2 中实现双向数据绑定的解决方案。
输入控件:-
interface IInputProps {
value: string;
onChange(event: Event): void;
}
export class InputWidget extends WidgetBase<IInputProps> {
private _onChange (event: Event) {
event.stopPropagation();
this.properties.onChange && this.properties.onChange((event.target as HTMLInputElement).value);
}
protected render(): DNode {
const { value } = this.properties;
return v('input', {
key: "input",
type: "text",
value
onchange: this._onChange
});
}
}
InputWrapper 小部件:-
export class InputWrapper extends WidgetBase<IWrapperProps> {
private inputValue: string = '';
protected inputValueChanges(value: string) {
this.inputValue = value;
this.invalidate();
}
protected render(): DNode {
<div>
{w(InputWidget, {onchange: this.inputValueChanges, value: this.inputValue })}
<span>Input Value:- {this.inputValue}</span>
</div>
}
}
这是在 Dojo 2 中实现双向数据绑定的解决方案。
希望对您有所帮助! :(