reactjs - 在 React 中访问输入值
问题描述
我正在尝试访问 React 表单中输入的值。不确定这是否是一个绑定问题。我的控制台说问题发生在 console.log(this.myInput.value.value);
import React from 'react';
import { getFunName } from '../helpers.js';
class StorePicker extends React.Component{
constructor(){
super();
this.goToStore = this.goToStore.bind(this);
}
myInput = React.createRef();
goToStore(event){
//Stop refreshing the page
event.preventDefault();
//Get input text
console.log(this.myInput.value.value);
//Change url to /store/input
}
render(){
return (
<form action="" className="store-selector" onSubmit={this.goToStore}>
<h2>Please Enter a Store</h2>
<input type="text" ref={this.myInput} required placeholder="Store Name" defaultValue={getFunName()} />
<button type="submit">Visit Store</button>
</form>
)
}
}
export default StorePicker;
解决方案
您应该使用对象的current
属性ref
来获取值。
this.myInput.current
对象的当前持有输入的引用attribute
。ref
访问 Ref 将 ref 传递给 render 中的元素时,对节点的引用将
current
在 ref 的属性处变得可访问。
例子:
class StorePicker extends React.Component {
myInput = React.createRef();
constructor() {
super();
this.goToStore = this.goToStore.bind(this);
}
goToStore(event) {
event.preventDefault();
console.log(this.myInput.current.value);
}
render() {
return (
<form action="" className="store-selector" onSubmit={this.goToStore}>
<h2>Please Enter a Store</h2>
<input type="text" ref={this.myInput} required placeholder="Store Name" />
<button type="submit">Visit Store</button>
</form>
)
}
}
ReactDOM.render(<StorePicker />, document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root">
loading.....
</div>
或者您可以使其成为受控组件并使用state
.
工作示例:
class StorePicker extends React.Component {
constructor() {
super();
this.goToStore = this.goToStore.bind(this);
this.state = {
input: ''
}
this.handleChange = this.handleChange.bind(this);
}
goToStore(event) {
event.preventDefault();
console.log(this.state.input);
}
handleChange(event) {
let value = event.target.value;
this.setState({
input: value
});
}
render() {
return (
<form action="" className="store-selector" onSubmit={this.goToStore}>
<h2>Please Enter a Store</h2>
<input type="text" onChange={this.handleChange} required placeholder="Store Name" />
<button type="submit">Visit Store</button>
</form>
)
}
}
ReactDOM.render(<StorePicker />, document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root">
loading.....
</div>
推荐阅读
- c# - 在 Parallel.ForEach 循环 C# 中错误捕获的特定异常
- python - 使用 isin 过滤数据框
- r - 删除逗号并不断收到“视图错误:'names' 属性 [17] 必须与向量 [1] 的长度相同”
- typescript - 为什么我在使用 TypeScript 的 try-catch 中使用 var 变量得到“变量在被分配之前使用”?
- c - 如何拒绝此代码中的非数字输入?
- apache-kafka - Kafka Stream - 按 client_id 过滤
- python - 如何在python和pdfminer中删除单个或可行的单词表单列表无法隐藏卢比字体
- node.js - webpack 或 node 如何知道如何从 node_modules 中选择插件?
- firebase - Firebase 托管创建自定义域的问题
- asp.net - Azure Pipelines 不编译我的存储库代码,只是克隆它