Javascript React中页面重新加载后的函数调用
我有这样一条路线:Javascript React中页面重新加载后的函数调用,javascript,reactjs,components,react-router,url-redirection,Javascript,Reactjs,Components,React Router,Url Redirection,我有这样一条路线: <Route component={Bar} path="/foo/:num"/> 下面是定义isNumExist()的index.js: 现在,在每次重新加载页面时,isNumExist()函数会触发两次,并以false作为第二次输出。因此无论num是否存在,页面都会重定向到给定的路由。如果我这样做的方式不对,请纠正我,或者最好详细说明真正的问题。您可以将其放在react的入口点文件(通常名称为app.js或index.js)中,每次加载页面只调用一次 所以你
<Route component={Bar} path="/foo/:num"/>
下面是定义isNumExist()的index.js
:
现在,在每次重新加载页面时,
isNumExist()
函数会触发两次,并以false
作为第二次输出。因此无论num
是否存在,页面都会重定向到给定的路由。如果我这样做的方式不对,请纠正我,或者最好详细说明真正的问题。您可以将其放在react的入口点文件(通常名称为app.js或index.js)中,每次加载页面只调用一次
所以你只需要:
您的函数将始终返回
false
,因为未返回map
函数结果
let foo = [...]; // Contains an array fetched from database
function isNumExist(num){
foo.map((element, i) => {
if (foo[i].num == num) {
return true;
}
});
return false;
}
foo.map(…)
将返回一个数组,但在任何时候都不会返回。map函数内部函数的函数签名仅适用于该函数本身
因此,请尝试:
let foo = [...]; // Contains an array fetched from database
function isNumExist(num){
var good_numbers_length = 0;
var length = foo.map((element, i) => {
if (foo[i].num == num) {
good_numbers_length += 1;
}
});
if (good_numbers_length > 0)
{
return true;
}
return false;
}
此外,
browserHistory.push('/home')代码>未创建正确的重定向。将其更改为类似于window.location='url'
或类似于的内容。您的组件名称应该以大写字母开头,而不是bar
,使用bar
更新,这只是一个打字错误,因为这里用示例代码替换了真实代码。感谢大家的提醒在数据库调用(我假设是异步的)完成之前,您的代码是否正在执行?我已经注释掉了其余的代码,只是使用自定义数组作为let foo=[…]
,以确保一切正常运行。仍然有着同样的眼睛,我已经尝试过一种对我有效的类似方法。我声明了一个变量,默认值为false
,如果num
有效,则更新为true
,并在函数末尾返回该变量。但在重定向之前,由于render()中使用了无效的num
,它仍然会生成错误。在触发render()
之前,我应该如何重定向?您确定browserHistory.push('/home')
实际上是创建重定向的方法。它似乎只会修改你的历史。不应该;它不是像window.location='url'
或其他类似的东西吗?是的,刚刚确认问题出在浏览器历史记录上,我将用react router
重定向来替换它。谢谢你,我会把这部分附在答案后面。
let foo = [...]; // Contains an array fetched from database
function isNumExist(num){
foo.map((element, i) => {
if (foo[i].num == num) {
return true;
}
});
return false;
}
let foo = [...]; // Contains an array fetched from database
function isNumExist(num){
var good_numbers_length = 0;
var length = foo.map((element, i) => {
if (foo[i].num == num) {
good_numbers_length += 1;
}
});
if (good_numbers_length > 0)
{
return true;
}
return false;
}