繁体   English   中英

React Component 渲染两次,第一次渲染时 props 'undefined'

[英]React Component rendering twice, props 'undefined' at first render

我有一个渲染两次的反应子组件(FinalReport.js),除了在第一次渲染时,其中一个道具由于某种原因未定义,这会引发错误。 当然,我可以添加错误处理,但这似乎不是最佳实践。

父组件包含用户输入,这些输入在按下“保存”按钮时保存为 useState Hook (esrData)。 第一个子组件 (Airload.js) 包含更多输入并调用 API,并将结果保存为 useStateHook (airLoadRes)。 两个钩子都在父组件中定义并作为道具传递。 有问题的子组件(FinalReport.js)只有在两个钩子都可用时才会呈现,然后传递钩子。 为什么 FinalReport 渲染两次,为什么 airLoadRes 在第一次渲染时未定义? 未使用严格模式。 任何帮助表示赞赏!

父组件

const GenerateEnergySavings = () => {

    const [esrData, setEsrData] = useState();
    const [airLoadRes, setAirLoadRes] = useState();

...

return( ...
// Child Component 2
 {(esrData && airLoadRes != undefined)  ?
         <PDFViewer height='1000px' width='1000px'>
             <FinalReport esrData={esrData} airLoadRes={airLoadRes} />
         </PDFViewer> : ''}
...
// Child Component 1 (API)
<Airload airLoadRes={airLoadRes} setAirLoadRes={setAirLoadRes} />



子组件 1 编辑:我应该提到这是一个引导模式

const Airload = ({ airLoadRes, setAirLoadRes }) => {

...

  // Airload API
    const getAirLoadCalc = async () => {
        console.log(airloadData)
        await Axios.post('https://localhost:44418/airload', airloadData)
        .then(res => {
            setAirLoadRes(res.data)
            console.log(res)
            setKey(6)
        }).catch(err => {
            alert(err)
        })
    }
}

子组件 2

// This is rendering twice!! ONLY airLoadRes comes in as undefined on first render
export const FinalReport = ({ esrData, airLoadRes }) => {

    console.log(esrData)
    console.log(airLoadRes)

...
  1. 此代码( const [airLoadRes, setAirLoadRes] = useState(); )将 airLoadRes 初始化为未定义。

    这就是为什么它在第一次渲染时未定义。

  2. React 会在 state、上下文或属性的每次更改时呈现。 所以,我猜 FinalReport 被渲染两次是因为 esrData state 的变化。 或代码中可能包含的其他 state。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM