【问题标题】:React 4.0.0 BrowserRouter rendering all RoutesReact 4.0.0 BrowserRouter 渲染所有路由
【发布时间】:2023-03-06 05:40:01
【问题描述】:

我正在尝试制作一个简单的短信应用程序,使用 react 和流星进行用户注册,当我尝试添加路由时:

**//main.js**
import React from "react";
import ReactDOM from "react-dom";
import {Meteor} from "meteor/meteor";
import {Tracker} from "meteor/tracker";
import { BrowserRouter, Route, browserHistory } from 'react-router-dom'

import {Texts} from "./../imports/api/Text";
import App from "./../imports/ui/App";
import Name from "./../imports/ui/Name";
import NotFound from "./../imports/ui/NotFound"

Meteor.startup(() => {
    Tracker.autorun(() => {
        let texts = Texts.find().fetch();
        console.log(texts);
        console.log(browserHistory);
        const routes = (
            <BrowserRouter>
                <div>
                    <Route path="/chat" render={()=>{
                        return <App texts={texts} />
                    }}/>
                    <Route path="*" component={NotFound}/>
                </div>
            </BrowserRouter>
        );
        ReactDOM.render(routes, document.getElementById("app"));
    });
});


**//NotFound.js**
import React from "react";

export default class NotFound extends React.Component{
    render(){
        return <p>URL not found</p>
    }
}

它将这两个东西都呈现到屏幕上,我看到我的错误 404 文本和我的短信应用程序。我的问题是,如何在无法识别路线(例如“/asddkib”)时让 NotFound 页面呈现,并在我转到正确的路径(“/chat”)时让它消失(只是应用程序) ?现在,如果我去 /chat 那么两者都会被渲染到屏幕上。

【问题讨论】:

    标签: reactjs meteor react-router


    【解决方案1】:

    使用 switch 语句

     import { BrowserRouter, Route, Switch, browserHistory } from 'react-router-dom', 
     <BrowserRouter>
                <Switch>
                    <App path="/chat" texts={texts}/>
                    <Route  component={NotFound}/>
                </Switch>
      </BrowserRouter>
    

    【讨论】:

    • 还是没有结果,要不要去掉开关的
      ?还是我用 div 添加开关?
    • 谢谢!!!因此,如果我要创建新页面,我是否必须像使用 那样创建 或组件名称
    • 您可以使用任何选项
    【解决方案2】:

    您正在寻找 react 路由器的开关功能。

    将您的导入从“react-router”更改为:

    import { BrowserRouter, Route, Switch, browserHistory } from 'react-router-dom',
    

    然后,将 Switch 组件添加到您的渲染中:

    <BrowserRouter>
            <Switch>
                <Route path="/chat" render={()=>{
                    return <App texts={texts} />
                }}/>
                <Route  component={NotFound}/>
            </Switch>
    </BrowserRouter>
    

    【讨论】:

    • 我有,但仍然无法正常工作.....我的 NotFound.js 有问题吗?(以上更新)
    • 我意识到我有小写的“开关”组件,你需要使用大写的开关吗?我已经更新了代码。
    • 你能在你的 NotFound 组件中显示代码吗? (将其添加到答案并在此处回复)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 2018-10-18
    • 2017-06-07
    • 2017-11-15
    • 2019-03-13
    相关资源
    最近更新 更多