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)
它也给了我同样的错误。
您需要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)
| 归档时间: |
|
| 查看次数: |
3505 次 |
| 最近记录: |