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 中实现双向数据绑定的解决方案。

希望对您有所帮助! :(