javascript - 如何重写这个双箭头函数

标签 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>
            );
        });

最佳答案

如有必要,您可以修改 linting 规则。 如果你想修改你的函数,这里有一种定义它的方法,一个常规函数返回一个绑定(bind)到外部 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);
}

关于javascript - 如何重写这个双箭头函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54552005/

相关文章:

javascript - 如何使用 jQuery 在动态 DOM 元素上使用 .insertAfter?

javascript - 在 React 中切换 aria-pressed 角色以实现 Web 可访问性的最有效方法

javascript - 无法将 JSON 结果绑定(bind)到组件变量

javascript - 对讲机 ECMASCRIPT6 标签管理器错误

javascript - 如何使用动态创建的名称访问 JavaScript 数组?

javascript - Sinon单元测试MySQL连接

javascript - 在 React 中将 prop 传递给 <img src ="this.prop."/> 时图像未加载

reactjs - 如何定义可能未定义的类型

javascript - 从解构数组创建对象的片段

javascript - 基于文本输入的重定向不区分大小写