当前位置: 首页 > 知识库问答 >
问题:

event.currentTarget.name作为currentTarget返回

梅庆
2023-03-14

我在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'
    }
  }

共有3个答案

万高轩
2023-03-14

请参见上面的“我的解决方案编辑”。我的handleChange函数绑定到一个去Bounce,因此我必须在onChange属性中包含event.persist()。

壤驷阳冰
2023-03-14

我觉得你需要改变

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)}
        />
濮阳钟展
2023-03-14

最近我遇到了同样的问题,我使用了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