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;
    }