实例化 React 组件时,如何执行更新状态的异步函数?

How do I execute an async function that updates state when I instantiate a React component?

目前我有 App.tsx 包含这个位。

<Route path="/car/:carModel" component={displayCarInfo} />

// @ts-ignore
const displayCarInfo = ({ match  }) => (
    <div>
        <CarInfoPage carModel={match.params.carModel}/>
    </div>
)

稍后在我的 CarInfoPage 组件中我有

let carModel  = props.carModel 
let [state, setState] = useState({carInfo : null, otherInfo: null})

async function getInfo(query : string) { 
    let carInfo = await GetCarInfo()   // make API call
    carInfo = processCarInfo()         // process data a little bit

    setState({                         // update state
            ...state,
            carInfo: carInfo
        })
}

如何在加载组件时运行这个getInfo()函数,使state.carInfo不是null

如果我只是 运行 我 render() 之前的函数,它表明状态没有更新。

您可以使用 useEffect 挂钩和空依赖数组。

let carModel  = props.carModel 
let [state, setState] = useState({carInfo : null, otherInfo: null})

async function getInfo(query : string) { 
  let carInfo = await GetCarInfo()   // make API call
  carInfo = processCarInfo()         // process data a little bit

  setState({                         // update state
    ...state,
    carInfo: carInfo
  });
}

useEffect(() => {
  getInfo(queryString);
}, []); // <-- runs only once when component mounts

注意:初始状态值 null,因此您可能需要在渲染任何内容之前进行一些空值检查。