Я создаю компонент, который отображает серию общих полей ввода. Магазин поддержка использует простой массив пар ключ-значение для управления данными:Как получить ссылку на целевой элемент внутри обратного вызова
[
{fieldkey: 'Signs and Symptoms', value:'fever, rash'},
{fieldkey: 'NotFeelingWell', value:'false'},
{fieldkey: 'ReAdmission', value:'true'},
{fieldkey: 'DateOfEvent', value:'12/31/1999'}
]
Для того, чтобы устранить много шаблонного кода, связанные с данными связывания компонент использует те же клавиши при генерации HTML-разметку (см. атрибут 'data-fieldname').
var Fields = React.createClass({
handleOnChange:function(e){
Actions.updateField({key:e.target.attributes['data-fieldname'].value, value:e.target.value})
},
setValue:function(){
var ref = //get a reference to the DOM element that triggered this call
ref.value = this.props.form.fields[ref.attributes['data-fieldname']]
},
render:function(){
return (<div className="row">
<Input data-fieldname="Signs and Symptoms" type="text" label='Notes' defaultValue="Enter text" onChange={this.handleOnChange} value={this.setValue()} />
<Input data-fieldname="NotFeelingWell" type="checkbox" label="Not Feeling Well" onChange={this.handleOnChange} value={this.setValue()} />
<Input data-fieldname="ReAdmission" type="checkbox" label="Not Feeling Great" onChange={this.handleOnChange} value={this.setValue()} />
<Input data-fieldname="DateOfEvent" type="text" label="Date Of Event" onChange={this.handleOnChange} value={this.setValue()} />
</div>)
}
})
Моя цель состоит в том, чтобы использовать одни и те же две функции для записи/чтения из магазина для всех входов и без дублирования кода (т.е. я не хочу, чтобы добавить REFS декларацию к каждому ввод, который дублирует ключ, уже сохраненный в 'data-fieldname'). Все работает плавно при обратном вызове, связанном с событием onChange. Однако я не уверен, как получить ссылку на рассматриваемый узел DOM в функции setValue.
Заранее спасибо
На данный момент 'this.setValue()' выполняется,/элемент компонент, который связан с этим вызовом делает даже еще не существует. –
Точка хорошо приняты. Можете ли вы предложить альтернативный подход, который позволяет избежать дублирования ключей? –
Хранить информацию в виде массива объектов (например) и генерировать элементы динамически? –