Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 新版本中的反应状态用法_Reactjs - Fatal编程技术网

Reactjs 新版本中的反应状态用法

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} 输入

我是新来的反应者

目前我们正在使用新版本的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}
输入您的姓名:

输入您的年龄:

); } }
我如何在旧版本中定义它

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)} /> ); } 问题
  • React挂钩仅在功能组件中有效
  • 当数组是旧代码中的对象时,您正在使用它作为状态
  • 与基于类的组件的
    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>
      );
    }