получение двух компонентов при вызове одного

#javascript #node.js #reactjs #react-router-dom

#javascript #node.js #reactjs #реагировать-маршрутизатор-dom

Вопрос:

router.js код здесь

 import  React from 'react';
import { Route } from 'react-router-dom';
import CommentList from './containers/commentview';
import CommentDetalList  from './containers/commentdetailview';
import Demo from './containers/Login'
const BaseRouter = () =>(
<div>
    <Route exact path='/' component={CommentList}/>
    <Route exact path='/:commentid' component={CommentDetalList}/>
    <Route exact path='/login' component={Demo}/>

 </div>
 )
 export default BaseRouter;
  

login.js здесь находится демонстрационный код

       import React from 'react';
      import { Form, Input, Button, Checkbox } from 'antd';

      const layout = {
       labelCol: {
     span: 8,
      },
     wrapperCol: {
     span: 16,
    },
     };
    const tailLayout = {
    wrapperCol: {
    offset: 8,
    span: 16,
    },
    };

   const Demo = () => {
   return (
   <Form
   {...layout}
   name="basic"
   initialValues={{
    remember: true,
   }}
   >
   <Form.Item
    label="Username"
    name="username"
    rules={[
      {
        required: true,
        message: 'Please input your username!',
      },
    ]}
  >
    <Input />
  </Form.Item>

  <Form.Item
     label="Password"
      name="password"
      rules={[
       {
        required: true,
        message: 'Please input your password!',
       },
     ]}
     >
    <Input.Password />
    </Form.Item>

    <Form.Item {...tailLayout} name="remember" valuePropName="checked">
    <Checkbox>Remember me</Checkbox>
    </Form.Item>

    <Form.Item {...tailLayout}>
    <Button type="primary" htmlType="submit">
      Submit
    </Button>
    </Form.Item>
     </Form>
     );
       };
     export default Demo;
  

Итак, проблема в том, что когда я иду http://localhost:3000/1 я получаю представление из идентификатора 1 id, но когда я перехожу к http://localhost:3000/login я также получаю представление из id1 и страницу входа в систему, но, как вы можете видеть, демокод или login.js код, который я возвращаю, — единственная страница входа. я хочу получить единственную страницу входа, когда я перехожу на http://localhost:3000/login

Комментарии:

1. у вас слишком много exact path реквизитов. Выберите только один маршрут для его размещения. Обычно тот, который вы хотите отобразить первым

Ответ №1:

Причина, по которой это происходит, заключается в том, что react-router-dom не знает, что /login не является commentid

Оберните свои маршруты в switch

Импортируйте его из react-router-dom

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

И оберните в него свои маршруты, а также обязательно измените порядок своих маршрутов, потому что

 <Switch>
    <Route exact path='/login' component={Demo}/>
    <Route exact path='/:commentid' component={CommentDetalList}/>
    <Route exact path='/' component={CommentList}/>
</Switch>
  

Таким образом, как только он попадет, /login он не будет отображаться /:commentid , потому что переключатель ограничивает отображаемые маршруты до 1

Комментарии:

1. Спасибо, это сработало, но не могли бы вы рассказать мне подробно, почему я должен изменить его порядок

Ответ №2:

Вы должны использовать Switch , а не div для завершения настройки маршрута. И я бы посоветовал вам проложить свой маршрут, как указано ниже.

 import { Route, Switch } from 'react-router-dom';
.
.
.
const BaseRouter = () =>(
  <Switch>
    <Route exact path='/comments' component={CommentList}/>
    <Route exact path='/comments/:commentid' component={CommentDetalList}/>
    <Route exact path='/login' component={Demo}/>
  </Switch>
)

export default BaseRouter;

  

и вы можете перенаправить на свой компонент входа, когда пользователь переходит к / .