javascript - React ref 在 Material ui 的自定义输入中给出了未定义

标签 javascript reactjs material-ui

我正在react中工作,我提供了自定义输入。自定义输入通过提供myRef作为react ref的 Prop 在某些组件中使用。然而,所有过程都很好,但它在控制台中显示值未定义。

自定义输入

class CustomInput extends React.Component {
  render() {
      const { classes, formControlProps, labelText, id, labelProps,inputRef, inputProps, error, success } = this.props;
    return (
        <FormControl {...formControlProps} className={formControlProps.className + " " + classes.formControl}>
            {labelText !== undefined ? (<InputLabel
                classes={{
                    root: classes.labelRoot + (error ? " " + classes.labelRootError:success ? " " + classes.labelRootSuccess:""),
                }}
                htmlFor={id}
                {...labelProps}
            >
                {labelText}
            </InputLabel>):null}
            <Input
                classes={{
                    root: (labelText !== undefined ? "":classes.marginTop),
                    disabled: classes.disabled,
                    underline: classes.underline,
                    inkbar: (error ? classes.inkbarError:success ? classes.inkbarSuccess:classes.inkbar),
                }}
                id={id}
                ref={inputRef} //Here ref props is map with inputRef
                {...inputProps}
            />
            {error ? <Clear className={classes.feedback + " " + classes.labelRootError}/>:success ? <Check className={classes.feedback + " " + classes.labelRootSuccess}/>:null}
        </FormControl>
    );
  }
}

在其他组件中使用自定义输入

handleSubmit(event) {
            event.preventDefault();
            console.log(this.email.value); //show undefined in console
        }
    <form onSubmit={this.handleSubmit.bind(this)}>
        <CustomInput
            labelText="Email"
            id="email"
            inputRef={(input) => {this.email = input}} // provided inputRef Prop
            formControlProps={{
                fullWidth: true
            }}
            inputProps ={{
                type:"email",
            }}
        />
        </ItemGrid>
     </form>

最佳答案

我将您的代码放入 CodeSandbox 编辑器中,它似乎工作正常。 当我按 Enter 键(提交表单)时,我会在控制台中记录电子邮件。如果电子邮件有效。

您能看一下并更好地向我们解释一下问题是什么吗?也许我没完全理解你在说什么。

LE:ref 适用于 native input 元素。对于来自 react-ui-next 的自定义 Input,您应该使用 inputRef

Edit kx11z14w5o

关于javascript - React ref 在 Material ui 的自定义输入中给出了未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48642297/

相关文章:

reactjs - React MUI 菜单不关闭

reactjs - readOnly MobileDatePicker 在 Material UI v5 中不起作用

javascript - jQuery 工具提示插件可以根据另一个 div 而不是鼠标来定位工具提示?

javascript - 检测其他打开的网站甚至应用程序的数量(可能)?

javascript - Angular2进度圈包

javascript - 小部件内的类的冒泡事件?

reactjs - 从 "exceljs"导入 Excel 在浏览器上抛出错误 TypeError : Cannot read property 'prototype' of undefined

react-router - 在带有 TSX 的 typescript 1.6 中使用 react-router 运行示例

node.js - 找不到模块 : Error: Can't resolve 'react-bootstrap-validation'

css - 是否可以将函数传递到组件内的 Material-UI withStyles() 中