react 使用react-router-dom 在Route對象上component 參數接收的是一個方法而非一個對象


其實對於jsx語法 一直覺的它有點清晰都不是很好,js和html混在一起有點不倫不類的樣子,以下是我在使用react中遇到的一個很奇葩的事情

假定你定義了一個component Mine

 1 import React from 'react';
 2 
 3 class Mine extends React.Component {
 4     constructor(peops) {
 5         super();
 6     }
 7 
 8     render() {
 9         console.log('mine', this);
10         return (
11             <div>
12                 <div className='head'>
13                     <span>mine</span>
14                 </div>
15             </div>
16         )
17     }
18 }
19 
20 export {Mine}

 

然后你在另一個組件上引用 

import React from 'react'
import {Mine} from "../mine/mine";

class San extends React.Component {
    constructor(props) {
        super();
        this.state = {
            name: '第2個頁面'
        }
    }

    componentDidMount() {
        console.log(typeof <Mine/>)//打印
        console.log(typeof Mine) //打印
    }

    render() {
        return (
            <div id={'san'}>
                {this.state.name}
            </div>
        )
    }
}

export {San}

你會發現第一個<Mine/>輸出的是一個對象 而Mine輸出的是一個方法 而在react-router-dom中使用

return (
            <HashRouter>
                <Switch>
                    <Route exact path={'/'} component={Mine}/> //沒有問題
                    <Route exact path={'/'} component={<Mine/>}/> //報錯
                    <Route exact path={'/mine2'} component={() => Mine;
                    }/> //報錯
                    <Route exact path={'/mine2'} component={() => <Mine/>;
                    }/> //沒有問題
                    <Route exact path={'/mine2'} component={() => new Mine();
                    }/> //沒有問題
</Switch> </HashRouter> )

 其原因就component 接收的是一個方法而不是一個對象 而這個方法返回的值必須是react組件; 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM