【问题标题】:React Route doesn't redirectReact Route 不会重定向
【发布时间】:2020-01-04 18:43:06
【问题描述】:

我正在使用 React 创建博客。 我上传了一些部分:https://codesandbox.io/s/youthful-bush-z3cce

主页上有一个注释和其他注释的列表。当我点击这些笔记的一些链接时,它会打开,我可以看到另一篇文章。但是,如果我尝试再次单击另一个帖子,它不会重新加载,尽管它会更改 url。

【问题讨论】:

  • 您刚刚与全世界共享了您的 API 密钥。你确定没问题?
  • @apokryfos 我认为你是对的,API 密钥不应该像FAQ 中提到的那样共享(最后一个问题 - 我应该保护这些令牌吗?如何?)。但是建议的环境。处理仅适用于静态站点(例如 Gatbsy 博客)。是否有任何帖子如何使用客户端应用程序处理它?
  • 你真的不能。您需要某种服务器端“控制器”来充当使用您的密钥发出的请求的包装器
  • @xenia 沙盒中有哪个键?它是交付密钥还是个人访问密钥?如果它是个人访问密钥,我认为您应该转到Settings/API keys 并撤销该密钥。如果它是一个交付密钥,我认为保持它处于活动状态是可以的,因为它是只读的。有一个关于令牌处理的SO question
  • 非常感谢!下次我会更小心的。

标签: reactjs react-router


【解决方案1】:

这是因为您有相同的组件来呈现您的帖子。您的 componentDidMount 只运行一次,它负责调用您的 api。您需要在不同的函数中获取 api 逻辑并在componentDidUpdate 中再次调用它。

我已经在 codesanbox 存储库中完成了它 - https://codesandbox.io/s/musing-grass-sxokl

 componentDidMount() {
    if (!this.props.match) {
      return;
    } else {
      this.callApi();
    }
  }

  componentDidUpdate() {
    this.callApi();
  }

  callApi = () => {
    client
      .getEntries({
        content_type: "blogPost",
        "fields.slug": this.props.match.params.slug
      })
      .then(response => {
        console.log(response);
        this.setState(
          {
            content: response.items[0].fields.content,
            title: response.items[0].fields.title,
            date: response.items[0].fields.date,
            country: response.items[0].fields.country
          },
          () => console.log(this.state)
        );
      });
  };

希望对你有所帮助。

【讨论】:

  • 当然你应该为你的 api 逻辑函数选择一个更好的名字,而不是这么简单和模糊的名字。 :)
  • 是的,componentDidUpdate 应该在这里解决问题。但还要检查 didUpdate 方法中的 props 是否发生了变化,这样你就不会太频繁地调用 api。我创建了一个沙盒here。我还改进了组件的一些较小部分。
  • @AWolf 你是对的。我完全忘记了。谢谢。 :)
猜你喜欢
  • 2018-05-27
  • 1970-01-01
  • 2020-08-28
  • 1970-01-01
  • 2018-12-26
  • 1970-01-01
  • 1970-01-01
  • 2020-01-25
  • 2019-10-13
相关资源
最近更新 更多