Reactjs 新版本中的反应状态用法
我是新来的反应者 目前我们正在使用新版本的react 反应状态的新版本(当前版本):Reactjs 新版本中的反应状态用法,reactjs,Reactjs,我是新来的反应者 目前我们正在使用新版本的react 反应状态的新版本(当前版本): 类MyForm扩展了React.Component{ const[state,setState]=useState([]); myChangeHandler=(事件)=>{ 让nam=event.target.name; 设val=event.target.value; setState({[nam]:val}); } render(){ 返回( 你好{state.username}{state.age} 输入
类MyForm扩展了React.Component{
const[state,setState]=useState([]);
myChangeHandler=(事件)=>{
让nam=event.target.name;
设val=event.target.value;
setState({[nam]:val});
}
render(){
返回(
你好{state.username}{state.age}
输入您的姓名:
输入您的年龄:
);
}
}
我如何在旧版本中定义它
class MyForm extends React.Component {
constructor(props) {
super(props);
this.state = {
username: '',
age: null,
};
}
myChangeHandler = (event) => {
let nam = event.target.name;
let val = event.target.value;
this.setState({[nam]: val});
}
render() {
return (
<form>
<h1>Hello {this.state.username} {this.state.age}</h1>
<p>Enter your name:</p>
<input
type='text'
name='username'
onChange={this.myChangeHandler}
/>
<p>Enter your age:</p>
<input
type='text'
name='age'
onChange={myChangeHandler}
/>
</form>
);
}
}
类MyForm扩展了React.Component{
建造师(道具){
超级(道具);
此.state={
用户名:“”,
年龄:空,
};
}
myChangeHandler=(事件)=>{
让nam=event.target.name;
设val=event.target.value;
this.setState({[nam]:val});
}
render(){
返回(
你好{this.state.username}{this.state.age}
输入您的姓名:
输入您的年龄:
);
}
}
我使用它与旧的类似,但是当名称状态更新时,状态中的年龄值被清除,反之亦然{
function MyForm() {
const [name, setName] = useState('');
const [age, setAge] = useState(0);
return (
<form>
<h1>Hello {state.username} {state.age}</h1>
<p>Enter your name:</p>
<input
type='text'
name='username'
onChange={(event) => setName(event.target.value)}
/>
<p>Enter your age:</p>
<input
type='text'
name='age'
onChange={(event) => setAge(event.target.value)}
/>
</form>
);
}
const[name,setName]=useState(“”);
const[age,setAge]=useState(0);
返回(
你好{state.username}{state.age}
输入您的姓名:
setName(event.target.value)}
/>
输入您的年龄:
设置(event.target.value)}
/>
);
}
问题
this.setState
不同,状态更新不是简单地合并,您需要自己管理它render
方法,整个功能组件体就是“render”函数。只需返回JSX即可constmyform=()=>{
const[state,setState]=useState({//{
常量{name,value}=event.target;
设置状态(状态=>({
…说明,//这是什么“新版本”当然,react不能使用该状态定义?基于类的组件仍然是有效的语法,react团队不建议将旧的基于类的组件移植/转换为带有钩子的功能组件,因为它们现在可用。如果您坚持,建议从这里开始的步骤是首先自己尝试这种转换如果你被卡住或有问题,请发回这里。这不是代码编写服务。我们已经编辑了代码,谢谢
function MyForm() {
const [name, setName] = useState('');
const [age, setAge] = useState(0);
return (
<form>
<h1>Hello {state.username} {state.age}</h1>
<p>Enter your name:</p>
<input
type='text'
name='username'
onChange={(event) => setName(event.target.value)}
/>
<p>Enter your age:</p>
<input
type='text'
name='age'
onChange={(event) => setAge(event.target.value)}
/>
</form>
);
}
const MyForm = () => {
const [state, setState] = useState({ // <-- use object
age: null,
username: '',
});
const myChangeHandler = (event) => {
const { name, value } = event.target;
setState(state => ({
...state, // <-- copy previous state
[name]: val, // <-- update property
}));
}
return (
<form>
<h1>Hello {state.username} {state.age}</h1>
<p>Enter your name:</p>
<input
type='text'
name='username'
onChange={myChangeHandler}
/>
<p>Enter your age:</p>
<input
type='text'
name='age'
onChange={myChangeHandler}
/>
</form>
);
}