无法在react js中使用refs检索材质UI的输入字段

Wai*_*ein 2 reactjs material-ui

我正在使用 React JS + Material UI 核心开发 Web 应用程序。现在,我正在使用材质 ui 控件构建一个表单。现在,我正在尝试使用 React 的 refs 检索输入字段值 (TextField)。它总是说未定义。

这是我的组件

class CreateEventComponent extends React.Component{

    constructor(props)
    {
        super(props)


    }


    submitCreateEventForm(e)
    {
        e.preventDefault();
        alert(this.refs.name.input.value)
    }

    render()
    {
        return (
            <MuiThemeProvider>
            <div className={scss['page-container']}>
            <Grid
            spacing={16}
            container>
                <Grid item md={12}>
                    <Card>
                    <CardContent>
                        <form onSubmit={this.submitCreateEventForm.bind(this)}>
                        <div>
                            <TextField
                            ref="name"
                            className={scss['form-control']}
                            name="name"
                            label="Name" />
                        </div>

                        <div>
                        <Grid>
                        <Button type="submit" color="primary" variant="raised">Save</Button>
                        </Grid>
                        </div>
                        </form>
                    </CardContent>
                    </Card>
                </Grid>
            </Grid>
            </div>
            </MuiThemeProvider>
        )
    }

}

function mapStateToProps(state)
{
    return {

    };
}

function matchDispatchToProps(dispatch)
{
    return bindActionCreators({

    }, dispatch);
}

const enhance = compose(withWidth(), withStyles(themeStyles, { withTheme: true }), connect(mapStateToProps, matchDispatchToProps))
export default enhance(CreateEventComponent);
Run Code Online (Sandbox Code Playgroud)

如您所见,当表单提交时,我尝试使用 refs 提醒名称输入字段。但它总是显示“未定义”。我尝试使用它来获取 TextField 的值。

alert(this.refs.name.value)
Run Code Online (Sandbox Code Playgroud)

它抛出错误,说名称未定义。那么,如何使用 Ref 获取 TextField 的值?

我也是这样用的。

我在构造函数中创建 ref

 constructor(props)
    {
        super(props)

        this.nameRef = React.createRef();
    }
Run Code Online (Sandbox Code Playgroud)

然后为 TextField 设置 ref

<TextField
                            ref={this.nameRef}
                            className={scss['form-control']}
                            name="name"
                            label="Name" />
Run Code Online (Sandbox Code Playgroud)

然后以这种方式检索值。

this.nameRef.value
this.nameRef.input.value
Run Code Online (Sandbox Code Playgroud)

它也给了我同样的错误。

Nor*_*Nyx 6

原答案

您需要ref在构造函数中创建一个。

文档

class MyComponent extends React.Component {
    constructor(props) {
        super(props);
        this.myRef = React.createRef(); // create a ref
    }

    render() {
        return <div ref={this.myRef} />;
    }
}
Run Code Online (Sandbox Code Playgroud)

更新答案

根据材质UI的文档,你需要一个回调来传递给inputRef螺旋桨上的<TextField />

所以,除了原来的答案,试试这个:

<TextField
    inputRef={e => this.nameRef = e}
    className={scss['form-control']}
    name="name"
    label="Name" />
Run Code Online (Sandbox Code Playgroud)

  • 我也试过这种方法。不工作。如果您想检查,我更新了问题。 (2认同)