我在typescript中有一个handleChange函数,我在另一个函数中调用该函数,将文本字段中的更改值发送到mobx树。但是,当我设置const{name}=event.currentTarget
并稍后将其记录到函数中时,name变量将返回为“currentTarget”,而不是我在renderExtField函数中指定的name属性,并且该值未定义。
我通过调用renderHexTextField函数来呈现许多不同的文本字段,该函数包含两个参数。首先是价值的
如果它按预期工作,name变量将等于我的return语句中的“hoverFontColor”字符串,该字符串将作为css对象的键传递到handleChange,value将操纵mobx状态树。
任何帮助都很感激!
编辑**我忘了提到TextField组件是MaterialUI组件
解决方案编辑**——我的手的变化被绑定到一个去盎司。我必须更新onChange组件属性,以便event.persist()在this.handleChange之前运行。谢谢Praveen和Chris!
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'
}
}
请参见上面的“我的解决方案编辑”。我的handleChange函数绑定到一个去Bounce,因此我必须在onChange属性中包含event.persist()。
我觉得你需要改变
const { name, value } = event.currentTarget
到
const { name, value } = event.target
或者
const name = event.target.name;
const value = event.target.value;
这应该行得通
private handleChange = (event: any): void => {
const name = event.target.name;
const value = event.target.value;
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')
}
}
还有,你呢
<TextField
error={true}
id="standard-error"
margin="normal"
name={name}
placeholder={input}
onChange={(event) => this.handleChange(event)}
/>
最近我遇到了同样的问题,我使用了React.FormEvent
所以为了详细说明,尝试更改
React。更改事件
问题内容: 我正在使用JDBC / MySQL 5.1。我创建了一个查询,将一些数据插入表中,并希望从新创建的行返回生成的键。但是,当我通过“ id”引用该列时,这是我的PK和自动增量列。 所以,我的问题: 为什么使用作为列名? 问题答案: 您不应该按名称检索这些列。仅按索引,因为MySQL和auto_increments只能存在一列,该列返回可以由Statement.getGeneratedKe
C++ 引用 通过使用引用来替代指针,会使 C++ 程序更容易阅读和维护。C++ 函数可以返回一个引用,方式与返回一个指针类似。 当函数返回一个引用时,则返回一个指向返回值的隐式指针。这样,函数就可以放在赋值语句的左边。例如,请看下面这个简单的程序:#include <iostream> using namespace std; double vals[] = {10.1, 12.6, 33.1,
你可以写出返回结构的函数。如,findCenter函数把一个Rectangle类型作为参数,返回一个Point类型的值,其中包含着该矩形中心的坐标: Point findCenter (Rectangle& box) { double x = box.corner.x + box.width/2; double y = box.corner.y + box.height/2;
问题内容: 当我通过redis EVAL运行此代码时,它不会返回任何结果。知道为什么这行不通吗? bug.lua 如果我初始化表,则仅打印该值。 问题答案: 如果您参考Redis 文档 ,则可以看到Redis将Lua表转换为Redis回复所使用的规则: Lua表(数组)-> Redis多批量回复( 如果有的话,将被截断为Lua数组中的第一个nil ) Lua表带有单个ok字段-> Redis状态回
问题内容: 我遇到了我不了解的Go行为。我的想法是导入一个插件,该插件实现了两个软件包都没有的接口。如果返回一个结构,它可以正常工作,但是要确保它实现了该接口,我想返回一个失败的接口。 接口定义: 主程序如下所示: 插件(存储在pg / test.go中) 我尝试了每个功能。 返回的函数将输出预期的输出: 其他功能结束于 有人可以解释为什么这不可能吗?如果在这种情况下不让您构建插件,那么创建插件会
我得到了谷歌云存储桶的URL。我必须: > 对于每个blob,我进行一些gcsapi调用,以获取关于blob的信息(blob.size、blob.name等) 对于每个Blob,我还必须读取它,在它里面找到一些东西,并将其添加到从GCS API调用中获得的值中 对于每个blob,我必须将步骤2和步骤3中找到的关于blob的值写入BigQuery 我有数千个blob,因此这需要使用ApacheBea