Reactjs useState未设置变量

Reactjs useState未设置变量,reactjs,react-hooks,Reactjs,React Hooks,我不明白为什么useState没有根据变量的参数props设置变量 片段是: import React, { useState } from 'react'; const FormContainer = (props) => { console.log('[FormContainer props]', props); // line 7 const [prevState, setPrevState] = useState(props); console.log('[For

我不明白为什么
useState
没有根据变量的参数
props
设置变量

片段是:

import React, { useState } from 'react';

const FormContainer = (props) => {
  console.log('[FormContainer props]', props);   // line 7
  const [prevState, setPrevState] = useState(props);
  console.log('[FormContainer]', prevState);     // line 9
props
包含一个对象,但钩子未设置
prevState
。它是
未定义的
。为什么?

呼叫代码。第一个组件显示一个列表。单击列表(网格)中的一行时,此组件将获取数据并将其作为参数发送给第二个组件FormContainer

import React, { Component } from 'react';
import Table from './VehicleList';
import VehicleForm from '../FormContainer';

class Vehicles extends Component {
  state = {};

...

  render() {
    return (
      <div>

        {this.state && this.state.vehicleList && (
          <Table vehicleList={this.state.vehicleList} clicked={this.vehicleSelectedHandler} />
        )}
        {console.log('[Vehicles render selectedVehicle]', this.state.selectedVehicle)}
        <VehicleForm vehicle={this.state.selectedVehicle} />
      </div>
    );
  }
import React,{Component}来自'React';
从“/VehicleList”导入表;
从“../FormContainer”导入车辆表单;
类车辆扩展组件{
状态={};
...
render(){
返回(
{this.state&&this.state.vehicleList&&(
)}
{console.log('[Vehicles render selectedVehicle]',this.state.selectedVehicle)}
);
}
从调试器:


useState
将默认值作为其参数。它将仅在第一次渲染时设置,并且在
props
更改时不会更新。您应该调用
setPrevState
来更新值

useState
用于访问当前状态。如果您需要以前的道具或以前的状态,请查看

用钩子实现这一点不是一个好主意。车辆状态和更新应该在
Vehicles
组件内。类内不需要
useState
VehicleForm
应该是一个无状态组件,应该接收一个回调来更新车辆


基于整个
props
对象,在通用
FormContainer
中跟踪更改和处理更新是很困难的。

它没有在原始调用中设置。您是否建议创建钩子并立即调用第二个参数setPrevState?我不应该将其命名为prev。@user2443507代码
这个。state.selectedVehicle
表示在第一次渲染期间未选择任何内容,仅在一些用户交互=>之后,您需要显式调用setter,而不是依赖第一次渲染的默认值进行多次重新渲染。React限制渲染的数量以防止无限循环。▶ 折叠了2个堆栈框架。FormContainer src/containers/FormContainer.js:9 6 | const FormContainer=(props)=>{7 | console.log('[FormContainer props]',props);8 | const[prevState,setPrevState]=useState();>9 | setPrevState(props);我更新了我的答案。您可能应该改变方法或使用一些现有库来处理表单。为什么需要
FormContainer
中的
useState
?如何使用
prevState
?请添加所有相关代码。您可能需要某种形式的
useffect
调用代码通过PI调用并将其传递给表单。我希望表单传回已编辑的数据以便过帐。