首页 > 解决方案 > 你如何通过反应路由器传递道具?

问题描述

import React, { Component } from 'react';
import {
    Route,
    BrowserRouter as Router,
    Switch,
    Redirect
} from "react-router-dom";
import Landing from './Pages/Landing';
import FourInARow from "./Pages/fourinarow";
import logo from './logo.svg';
import './App.css';

function PublicRoute({ component: Component, mode, ...rest}){
    console.log(...rest)
    return (
        <Route
            {...rest}
            render={ (props) => mode !== null
                ? <Component {...rest} />
                : <Redirect to={'/fourinarow'}/>
            }
        />
    );
}


export default class App extends Component {
    constructor(){
        super();
        this.state = {
            mode: null
        }
    }
    setMode = (mode) => {
        this.setState({mode: mode});
        console.log('click');
    }

    render(){
        return (
            <div className="App">
                <Router>
                    <Switch>
                        <Route exact path='/'
                               render={(props) => <Landing setMode={this.setMode}/>}/>
                        <PublicRoute
                            path='/fourinarow'
                            component={FourInARow}
                            mode={this.state.mode}/>
                    </Switch>
                </Router>

            </div>
        );
    }
}

我试图通过我的 PublicRoute 函数传递道具,希望以后添加一个需要身份验证的 privateRoute 函数。除了传递道具之外,这两个函数都可以正常工作。Route 组件已经在传递 props 了。

标签: javascriptreactjsreact-routerreact-router-dom

解决方案


我看到的一件事是PublicRoute你正在解构mode并且...rest没有道具,但你没有传递modeprops进入Component.


推荐阅读