【发布时间】:2019-05-28 16:36:54
【问题描述】:
过去几天我一直在试图让我的嵌套路由工作,我不得不说我完全迷路了。
我正在尝试使用以下功能:
- 带有多个链接的侧边栏。其中之一通往 /banking。
- /banking 默认在
{ CardWrapper }内呈现组件{ BankingCards }。 - 当用户点击
{ BankingCards }渲染的4 张卡片之一的<Link>时,我想渲染同一个{ CardWrapper }内的嵌套路径。
在下面的代码块中,您会注意到我尝试使用 switch 语句将组件动态分配给 actionComponent。这似乎以多种方式破坏了功能。
是方法不对,还是我遗漏了一些关于 React Router 组件的东西?
// Banking.js
import CardWrapper from '../../Wrappers/CardWrapper/CardWrapper';
import BankingCards from './BankingCards/BankingCards';
import AddBank from './AddBank/AddBank';
import AddDebit from './AddDebit/AddDebit';
import AddCredit from './AddCredit/AddCredit';
import AddDirect from './AddDirect/AddDirect';
class Banking extends Component {
state = {};
render() {
const { match } = this.props;
console.log(match.params);
// let actionComponent;
// switch (match.params.actionType) {
// case 'add-bank':
// actionComponent = AddBank;
// break;
// case 'add-debit':
// actionComponent = AddDebit;
// break;
// case 'add-credit':
// actionComponent = AddCredit;
// break;
// case 'add-direct':
// actionComponent = AddDirect;
// break;
// default:
// return null;
// }
return (
<div className={classes.Banking}>
<h1 className={classes.mainHeader}>Banking</h1>
<CardWrapper>
<Switch>
<Route exact path={`${match.path}`} component={BankingCards} />
<Route path={`${match.path}/:actionType`} component={actionComponent} />
</Switch>
</CardWrapper>
</div>
)
}
}
和
// BankingCards.js
const bankingCards = ({ match }) => {
return (
<>
<Card>
<h1>Add Bank Account</h1>
<Link to={`${match.url}/add-bank`}>
<SVG src={iconPlus} className={classes.iconPlus} />
</Link>
<h3>Manage accounts</h3>
</Card>
<Card>
<h1>Add Debit Card</h1>
<Link to={`${match.url}/add-debit`}>
<SVG src={iconPlus} className={classes.iconPlus} />
</Link>
<h3>Manage debit cards</h3>
</Card>
<Card>
<h1>Add Credit Card</h1>
<Link to={`${match.url}/add-credit`}>
<SVG src={iconPlus} className={classes.iconPlus} />
</Link>
<h3>Manage credit cards</h3>
</Card>
<Card>
<h1>Add Direct Debit</h1>
<Link to={`${match.url}/add-direct`}>
<SVG src={iconPlus} className={classes.iconPlus} />
</Link>
<h3>Manage direct debits</h3>
</Card>
</>
);
};
【问题讨论】:
-
打印什么
console.log(match.params);? -
一个空对象。那时我意识到我做的不对。
-
一个解决方案可能是使用
render属性而不是component,你可以在里面做你的开关盒
标签: reactjs react-router react-router-v4 react-router-dom