我有以下React组件:
export default class MyComponent extends React.Component {
onSubmit(e) {
e.preventDefault();
var title = this.title;
console.log(title);
}
render(){
return (
...
<form className="form-horizontal">
...
<input type="text" className="form-control" ref={(c) => this.title = c} name="title" />
...
</form>
...
<button type="button" onClick={this.onSubmit} className="btn">Save</button>
...
);
}
};
控制台给了我未定义-有人知道这段代码有什么问题吗?
功能组件
使用状态
返回一个有状态值和一个更新它的函数。
在初始呈现期间,返回的状态(state)与作为第一个参数传递的值(initialState)相同。
setState函数用于更新状态。它接受一个新的状态值,并对组件的重新呈现进行排队。
SRC——> https://reactjs.org/docs/hooks-reference.html#usestate
useRef
useRef返回一个可变的ref对象,其.current属性初始化为传递的参数(initialValue)。返回的对象将在组件的整个生命周期内持续存在。
SRC——> https://reactjs.org/docs/hooks-reference.html#useref
import { useRef, useState } from "react";
export default function App() {
const [val, setVal] = useState('');
const inputRef = useRef();
const submitHandler = (e) => {
e.preventDefault();
setVal(inputRef.current.value);
}
return (
<div className="App">
<form onSubmit={submitHandler}>
<input ref={inputRef} />
<button type="submit">Submit</button>
</form>
<p>Submit Value: <b>{val}</b></p>
</div>
);
}
我成功地把它绑定到函数上
updateInputValue (evt)
这一点。updateInputValue = this.updateInputValue.bind(this);
然而,输入值={this.state。inputValue}…
结果不是什么好主意。
以下是babel ES6的完整代码:
class InputField extends React.Component{
constructor(props){
super(props);
//this.state={inputfield: "no value"};
this.handleClick = this.handleClick.bind(this);
this.updateInputValue = this.updateInputValue.bind(this);
}
handleClick(){
console.log("trying to add picture url");
console.log("value of input field : "+this.state.inputfield);
}
updateInputValue(evt){
//console.log("input field updated with "+evt.target.value);
this.state={inputfield: evt.target.value};
}
render(){
var r;
r=<div><input type="text" id="addpixinputfield"
onChange={this.updateInputValue} />
<input type="button" value="add" id="addpix" onClick={this.handleClick}/>
</div>;
return r;
}
}
React版本:17.0.1
a)使用功能组件
b)使用hook: useState()管理状态。
编写并运行上面的代码:
import React, {useState} from 'react';
const InputElement = () => {
const [inputText, setInputText] = useState('');
return (
<div>
<input
onChange={(e) => {
setInputText(e.target.value);
}
}
placeholder='Enter Text'
/>
{inputText}
</div>
);
}
求解方案算法类似于双向数据绑定:
input <=> DATA_MODEL <=> Label_Text