首页 > 解决方案 > 使用从父级传递的道具将路由器导航链接反应到另一个页面

问题描述

我正在重新制作具有独特“类型”的卡片,这些卡片根据在反应中传递给它的 props.type 链接到不同的页面。

我是否正确地动态创建了这些路由器链接?

import React from 'react';
import {render} from 'react-dom';
import {Route, NavLink, Switch, Redirect} from 'react-router-dom';
import Answered from '../../containers/Blog/answered/answered-posts';
import './Post.css';

import RothIRA from '../../containers/Types/RothIRA';

function post(props) {

  return (
    <article className="Post" onClick={props.clicked}>

      <NavLink to={{
        pathname: '/' + props.type,
        hash: '#submit',
        search: '?quick-submit=true'
      }}>
        {props.type}
      </NavLink>

      <Switch>
        <Route path={'/' + props.type} component={RothIRA}/>
      </Switch>
    </article>

  );

}

export default post;

标签: javascriptreactjsreact-routerreact-link

解决方案


首先,Switch如果标签中只有一个标签,那么使用标签是没有意义Route的。因为即使标签中有两个或更多匹配的元素,Switch标签也只会呈现第一个匹配的元素。RouteSwitch

这是Switch标签https://reactrouter.com/web/api/Switch的官方文档

第二个是RothIRA组件。无论路由什么类型,它总是呈现。如果你让RothIRA组件根据路由灵活地渲染内容就可以了。但如果你不这样做,它会在每次路由时渲染相同的东西。如果你这样做了,看看这些例子。

这个例子是根据路由渲染不同的组件

import React from 'react';
import {render} from 'react-dom';
import {Route, NavLink, Switch, Redirect} from 'react-router-dom';
import Answered from '../../containers/Blog/answered/answered-posts';
import './Post.css';

import RothIRA1 from '../../containers/Types/RothIRA1';
import RothIRA2 from '../../containers/Types/RothIRA2';

function post(props) {

  return (
    <article className="Post" onClick={props.clicked}>

      <NavLink to={{
        pathname: '/' + props.type,
        hash: '#submit',
        search: '?quick-submit=true'
      }}>
        {props.type}
      </NavLink>

      <Switch>
        <Route path={'/1'} component={RothIRA1}/>
        <Route path={'/2'} component={RothIRA2}/>
      </Switch>
    </article>

  );

}

export default post;

这个例子正在渲染,RothIRA但让它知道 props 是什么类型

import React from 'react';
import {render} from 'react-dom';
import {Route, NavLink, Switch, Redirect} from 'react-router-dom';
import Answered from '../../containers/Blog/answered/answered-posts';
import './Post.css';

import RothIRA from '../../containers/Types/RothIRA';

function post(props) {

  return (
    <article className="Post" onClick={props.clicked}>

      <NavLink to={{
        pathname: '/' + props.type,
        hash: '#submit',
        search: '?quick-submit=true'
      }}>
        {props.type}
      </NavLink>

      <Route path={'/' + props.type} render={() => (<RothIRA type={props.type} />)}/>
    </article>

  );

}

export default post;

其他事情对我来说看起来不错。


推荐阅读