У меня есть функция handleChange в машинописи, которую я вызываю в другой функции, чтобы отправить значение изменений в текстовом поле в дерево mobx. Однако, когда я устанавливаю const { name } = event.currentTarget
и позже регистрирую его в функции, переменная имени возвращается как «currentTarget» вместо атрибута имени, который я назначаю в моей функции renderHexTextField, и значение не определено.
Я отрисовываю несколько различных текстовых полей, вызывая функцию renderHexTextField, которая принимает два параметра. Первое значение
Если бы она работала как задумано, переменная name равнялась бы строке 'hoverFontColor' из моего оператора return, которая затем передавалась в handleChange в качестве ключа для объекта css, а значение управляло бы деревом состояний mobx.
Любая помощь приветствуется!
edit ** Я забыл упомянуть, что компонент TextField является MaterialUI компонента
РЕДАКТИРОВАНИЕ РЕШЕНИЯ ** - Мой handleChange был привязан к отказов. Мне пришлось обновить атрибут компонента onChange, чтобы event.persist () запускался до this.handleChange. Спасибо Правин и Крис!
return (
this.renderHexTextField(css.hoverFontColor, 'hoverFontColor')
)
private renderHexTextField(input: string, name: string) {
// name parameter used to specify which state in handleChange function
if (name === 'fontType' || this._throwHexErr(input) === 'True') {
// If hex format is correct, render normal text field
return (
<TextField
required={true}
id="standard-required"
margin="normal"
name={name}
placeholder={input}
onChange={this.handleChange}
/>
)
} else {
// else render error text field
return (
<TextField
error={true}
id="standard-error"
margin="normal"
name={name}
placeholder={input}
onChange={this.handleChange}
/>
)
}
}
private handleChange = (event: React.ChangeEvent<HTMLInputElement>): void => {
const { name, value } = event.currentTarget
const { store } = this.props
const currentBot = store.bots.current
if (currentBot) {
const id = currentBot._id
const css: any = toJS(currentBot.theme.css)
log('css obj >> ', css)
if (css) {
css[name] = value
log('handleChange >>> ', name, value, css)
currentBot.patchCSS(id, css)
}
} else {
log('No current bot in handleChange')
}
}
private _validateHex(hexcode: string, regex: any) {
// Regex Testing Function
log('validating hex')
return regex.test(hexcode)
}
private _throwHexErr(userInput: string) {
// Return True or Error depending on result of Regex Test
const regex = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/
if (this._validateHex(userInput, regex)) {
return 'True'
} else {
return 'Error'
}
}