【发布时间】:2017-06-26 12:36:40
【问题描述】:
我有这样的路线:
<Route component={Bar} path="/foo/:num"/>
我想在Bar 组件内渲染视图之前检查我的数据库中是否存在num。我正在尝试使用如下所示的component mounting 函数重定向到另一个路由,以防num 无效:
import React, { Component } from 'react';
import {browserHistory} from 'react-router';
import { isNumExist } from '../../services/index.js';
class Bar extends Component {
componentWillMount(){
if (!isNumExist(this.props.params.num)){
browserHistory.push('/home');
}
}
render() {
...
}
}
这里是index.js,定义isNumExist():
let foo = [...]; // Contains an array fetched from database
function isNumExist(num){
foo.map((element, i) => {
if (foo[i].num == num) {
return true;
}
});
return false;
}
现在在每次重新加载页面时,isNumExist() 函数会触发两次,false 作为第二次输出。所以无论num 是否存在,页面都会重定向到给定的路由。如果我以错误的方式执行此操作,请纠正我,或者建议最好详细说明真正的问题。
【问题讨论】:
-
你的组件名称应该以大写开头,而不是
bar,使用Bar -
已更新,由于此处将真实代码替换为示例代码,这只是一个错字。感谢您强调
-
您的代码是否在数据库调用(我假设它是异步的)完成之前执行?
-
我已经注释掉了其余的代码,只是使用自定义数组作为
let foo = [...]以确保一切运行良好。仍然有同样的问题
标签: javascript reactjs components react-router url-redirection