如何重写此双箭头功能

时间:2019-02-06 10:59:02

标签: javascript reactjs ecmascript-6

我有一个更新日程表状态的函数,它是艺术家对象的数组。目前,我正在使用一个双箭头功能,该功能接受索引和艺术家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>
            );
        });

1 个答案:

答案 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);
}