我正在建立一个小聊天应用程序。我已经使用材料UI文本字段输入用户消息。但我不能引用它。我读到这一点。他们说,他们不支持refs
。这是我的代码。它的工作。
class App extends Component {
constructor() {
super();
this.state = {
q: "default"
};
}
handleChanges(val) {
this.setState({ q: val });
}
handleSearch(val) {
this.setState({ q: val });
console.log(this.state.q);
}
render() {
return (
<div className="App">
<h1> {this.state.q}</h1>
<Row className="show-grid">
<Col sm={2} md={4} className="contact"><h5>contact</h5><br /></Col>
<Col sm={10} md={8} className="chat grid-border"><h5>chat</h5><br />
<div className="history"></div>
<div className="message top-border">
<input type="text" ref="question" onChange={(e) => { this.handleChanges(this.refs.question.value) }} />
<MuiThemeProvider>
<FlatButton label="Primary" primary={true} onTouchTap={(e) => { e.preventDefault(); this.handleSearch(this.refs.question.value); }} />
</MuiThemeProvider>
</div>
</Col>
</Row>{/*show-grid ends here*/}
</div>
);
}
}
export default App;
如果我使用这个材料UI TextField
而不是原生HTML输入标记,它不会从引用中获得值。
<MuiThemeProvider>
<TextField hintText="Ask your question" fullWidth={true} multiLine={true} rows={2} rowsMax={4} type="text" ref="question" onChange={(e) => { this.handleChanges(this.refs.question.value) }}/>
</MuiThemeProvider>
对此是否有任何变通方法或替代UI库?
7条答案
按热度按时间1hdlvixo1#
也可以使用
inputRef
。该 prop 从材质1.0中可用。on change允许您在状态改变时更新状态,但是如果您需要保持值不变,那么inputRef是必需的。
还可以查看如何在react的material-ui中获取密码字段值
egmofgnx2#
请尝试以下操作
在材料用户界面输入字段中使用
inputRef
仅使用
inputRef
而非refbut5z9lq3#
如果你正在使用一个带有materialui的无状态功能组件,那么你可以使用react钩子。
6tr1vspr4#
不推荐使用这种引用元素的方式。请参见https://facebook.github.io/react/docs/refs-and-the-dom.html
请尝试使用此:
并将文本字段引用为
this.input
如果要获取TextField值,请使用
this.input.getValue()
我做过类似的事情。
tvmytwxo5#
在onChange方法中,您不需要使用
ref
来访问相同文本字段的值,material-ui TextField在onChange方法中传递2个参数:所以你可以这样写,不用ref:
根据DOC:
onChange:函数
当文本域的值更改时触发的回调函数。
签名:功能(事件:对象,新值:字符串)=〉空
event:更改文本字段的目标事件。
newValue:文本字段的新值。
ar7v8xwq6#
此解决方案允许使用多个TextField元素,这些元素可通过类内部的this.(name)访问。
我们仍然可以使用ref,但必须传入一个函数并在类上添加另一个属性(不是在props、refs或state上,而是在类本身上)。Material UI提供了一个.getValue()方法,我们可以从中检索值。
j2datikz7#
MenuItem
中有TextField
,默认情况下是隐藏的,所以我不能使用打开菜单事件,因为输入字段还没有呈现对我来说唯一有效的方法是用DOM元素监视变量