【问题标题】:Is it possible to reload a page once with react and react router?是否可以使用 react 和 react 路由器重新加载页面一次?
【发布时间】:2017-07-01 02:57:28
【问题描述】:

当我使用反应路由器渲染某些组件时,我需要重新加载我的页面。我需要这个,因为我需要一个 JavaScript 脚本来再次加载并检测具有特定 id 的特定表单标签。如果我不重新加载页面,脚本永远不会检测到表单的 ID。 (此脚本对表单进行了一些验证)。

如果我从我的主组件(根)转到联系人组件,则脚本不起作用(我可以发送带有空字段的表单)。但是,如果我从家里转到联系人组件,然后重新加载页面,脚本就会开始工作。

这是我在渲染主页并且脚本未检测到表单 ID 时遇到的错误:

form-submission-handler.js:162 Uncaught TypeError: Cannot read property 'addEventListener' of null at HTMLDocument.loaded (form-submission-handler.js:162)

这就是用来检测id的:

function loaded() {
    console.log('contact form submission handler loaded successfully');
   // bind to the submit event of our form
   var form = document.getElementById('gform');
   form.addEventListener("submit", handleFormSubmit, false);
};
document.addEventListener('DOMContentLoaded', loaded, false);

所以,如果我重新加载页面,form-submission-handler 脚本可以检测到表单。

Here 是一个页面,您可以在其中复制正在发生的事情。只需转到“联系人”部分,它位于导航栏中。

表单提交处理程序脚本位于我的 index.html 文件中的标记之前的脚本标记内,应用程序在此呈现。

【问题讨论】:

    标签: reactjs react-router reload


    【解决方案1】:

    可以使用 react 和 react 路由器重新加载页面。要重新加载,您只需提供指向带有联系人的 url 的锚链接,当用户单击该锚点时,将再次从服务器获取具有该 url 的页面(您必须确保您的服务器会响应该 url 并且返回您的反应应用程序)

    但是,人们通常会竭尽全力阻止 React 应用重新加载,因为在重新加载时,React 应用的所有状态都会丢失。我也想不出我实际上需要重新加载 react 应用程序的任何情况,尤其是对于像表单验证和提交这样普通的事情。因此,尽管您可能仍然需要重新加载,但有强烈的迹象表明您正在尝试以某种相当奇怪的方式使用 react,并且您的问题可能会通过更习惯于 react 及其通常的使用模式来解决。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-16
    • 2022-07-27
    • 2018-08-31
    • 2020-12-28
    • 2018-05-24
    • 1970-01-01
    • 2019-01-16
    • 2019-06-15
    相关资源
    最近更新 更多