我有一个更新日程表状态的函数,它是艺术家对象的数组。目前,我正在使用一个双箭头功能,该功能接受索引和艺术家ID。但是由于我的javascript linter,我无法使用双箭头功能。我该如何重写?
handleArtistChange = index => evt => {
if (evt) {
const newSchedule = this.state.schedule.map((artist, stateIndex) => {
if (index !== stateIndex) return artist;
return { ...artist, artist_id: evt.value };
});
this.setState({ schedule: newSchedule });
}
}
我尝试了以下方法:
handleArtistChange = function(index) {
return function(evt) {
if (evt) {
const newSchedule = this.state.schedule.map((artist, stateIndex) => {
if (index !== stateIndex) return artist;
return { ...artist, artist_id: evt.value };
});
this.setState({ schedule: newSchedule });
}
}
}
但这会导致无法读取未定义的属性“时间表”的错误
对我的函数的调用:
const lineup = this.state.schedule.map((artist, index) => {
return (
<div key={index} className="form__input-group--lineup">
<div>
<label className="form__label">{getTextNode('Artist *')}</label>
<Select
onChange={this.handleArtistChange(index)}
onInputChange={this.handleInputChange}
isClearable
options={options}
styles={customStyles}
backspaceRemovesValue={false}
placeholder={`Artist #${index + 1}`}
classNamePrefix="react-select"
/>
</div>
<div className="form__input-group--time">
<label className="form__label">{getTextNode('start time *')}</label>
<input name="startTime" type="time" required autoComplete="true" className="form__input" value={this.state.startTime} onChange={this.handleTimeChange(index)} />
</div>
<button type="button">-</button>
</div>
);
});
答案 0 :(得分:1)
如有必要,您可以修改起毛规则。
如果您想修改函数,可以使用一种定义它的方法,其中常规函数返回绑定到外部this
的匿名函数:
function handleArtistChange(index) {
return (function(evt) {
if (evt) {
const newSchedule = this.state.schedule.map((artist, stateIndex) => {
if (index !== stateIndex) return artist;
return { ...artist, artist_id: evt.value };
});
this.setState({ schedule: newSchedule });
}
}).bind(this);
}